Еще один демонстрационный пример приведен
buf = malloc(CDROM_RAW_SECTOR_SIZE * n_sec);
// ПОЛУЧАЕМ ДЕСКРИПТОР УСТРОЙСТВА
hCD = CreateFile(drive,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if (hCD != INVALID_HANDLE_VALUE)
// ПЕРЕДАЕМ ДРАЙВЕРУ ПРИВОДА КОМАНДУ IOCTL_CDROM_RAW_READ
fResult = DeviceIoControl( hCD, 0x2403E /* IOCTL_CDROM_RAW_READ */,
&rawRead, sizeof(RAW_READ_INFO),
buf, CDROM_RAW_SECTOR_SIZE*n_sec,
&x_size, (LPOVERLAPPED) NULL);
// ВЫВОДИМ РЕЗУЛЬТАТ (если есть, что выводить)
if (fResult)
for (a = 0; a <= x_size; ++a) printf("%02X%s",buf[a],(a%24)?" ":"\n");
else
printf("-ERROR"); printf("\n");
// СВАЛИВАЕМ
CloseHandle(hCD); return (fResult)?buf:0;
}
Еще один демонстрационный пример приведен в листинге 1.4.4, изучение которого бывает полезно при анализе некоторых защищенных дисковниже. Он иллюстрирует технику чтения TOC (Table Of Content) —– своеобразный аналог таблицы разделов лазерных аудиодисков.
Листинг 2.1.4.4. [/IOCTL.read.TOC.c] еще один Пример программы, взаимодействующей с CDFS-драйвером через IOCTL и читающей содержимое TOC'а (с расшифровкой), изучение которого бывает полезно при анализе некоторых защищенных дисков
/*--------------------------------------------------------------------------
*
* ЧТЕНИЕ И РАСШИФРОВКА TOC
* ========================
*
* build 0x001 @ 26.05.2003
--------------------------------------------------------------------------*/
main(int argc, char **argv)
{
int a;
HANDLE hCD;
unsigned char *buf;
WORD TOC_SIZE;
BYTE n_track;
DWORD x_size,b;
#define DEF_X "\\\\.\\G:" // привод по умолчанию
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий