Если удалось получить информацию
if(iRetry == 3)
{
printf("GetDiskInfo failed\n");
break;
}
iStatus = GetDiskInfo(bLetters[i]);
}
// Если удалось получить информацию о компакт-диске,
// исследуем его дорожки
if(iRetry != 3)
{
// Выводим номера дорожек
printf("Tracks: (%d - %d) %d\n",
di.bLowest, di.bHighest, di.dwTotal);
// Цикл по всем дорожкам диска
for(j = di.bLowest; j <= di.bHighest; j++)
{
// Получаем информацию о дорожке и отображаем ее
GetTrackInfo(j, bLetters[i]);
printf("track %d: location: %ld, info: %02.2X",
j, ti.dwLoc, ti.bInfo);
// Определяем тип дорожки - звуковая дорожка
// или дорожка с данными
if(ti.bInfo & 0x40)
printf(" * digital");
else
printf(" * audio");
// Определяем, разрашено ли копирование дорожки
if(ti.bInfo & 0x20)
printf(", copy permitted *\n");
else
printf(", copy prohibited *\n");
}
}
}
return 0;
}
// ---------------------------------------------------
// GetDiskInfo
// Получение информации о компакт-диске
// ---------------------------------------------------
int GetDiskInfo(int nCDUnit)
{
// Заголовок команды IOCTL Input
IOCTL_Input cmd;
// Очищаем заголовок
memset(&cmd, 0, sizeof(IOCTL_Input ));
// Заполняем заголовок
cmd.rh.bSize = 26;
cmd.rh.bSubUnit = 0;
cmd.rh.bCmd = 3;
cmd.bMediaDescriptor = 0;
cmd.lpTransferAddress = (DWORD)(void far *)&di;
cmd.wDataSize = 7;
cmd.wStartSector = 0;
cmd.lpVolID = (DWORD)(void far *)NULL;
di.bControl = 10;
// Вызываем драйвер
CallCDDriver(&cmd, nCDUnit);
return cmd.rh.wStatus;
}
// ---------------------------------------------------
Содержание Назад Вперед