Здравствуйте, MegaMonster, Вы писали:
[]
MM>Да, проблема в том что я не могу запустить пр-му с CDROM_TOC_ATIP_DATA или IOCTL_CDROM_READ_TOC_EX.
MM>Вот что работает:
P>>
MM>void ReadToc (void)
MM> {
MM> DWORD dwBytes;
MM>//DeviceIoControl(hCD,IOCTL_CDROM_READ_TOC,NULL,0,&toc,sizeof(CDROM_TOC),&dwBytes,NULL);
MM>DeviceIoControl(hCD,IOCTL_CDROM_GET_DRIVE_GEOMETRY,NULL,0,&toc,sizeof(CDROM_TOC),&dwBytes,NULL);
MM> }
P>>
Хмм, похоже ты не совсем понимаешь как работает DeviceIoControl. 3-й и 4-й параметры ф-й — это входные данные, 5-й и 6-й — выходные. Для того чтобы получить необходимые выходные данные, необходимо задать во входных что именно ты хочешь получить. Ты же в качестве входных указываешь 0. Нужно так:
CDROM_READ_TOC_EX cd_toc = { 0 };
cd_toc.Format = CDROM_READ_TOC_EX_FORMAT_ATIP; //Query the device for absolute time in pregroove (ATIP) data.
cd_toc.Msf = 1; //Msf member must be set to 1.
CDROM_TOC_ATIP_DATA atip_data = { 0 };
res = DeviceIoControl(cd_device, IOCTL_CDROM_READ_TOC_EX, &cd_toc, sizeof(cd_toc), &atip_data, sizeof(atip_data), &bytes_returned, NULL);
CDROM_TOC_ATIP_DATA_BLOCK* atip_block = &atip_data.Descriptors[0];
Хотя, честно говоря, я не совсем понимаю, как информация из ATIP поможет тебе в твоей задаче. К тому же у меня такое впечатление, что сия команда (CDROM_READ_TOC_EX_FORMAT_ATIP)
несколько глючит.