Слово состояния после вызова драйвера
BYTE bLowest;
BYTE bHighest;
DWORD dwTotal;
} DiskInfo;
// Запрос на получение информации
// о дорожке компакт-диска
typedef struct _TrackInfo
{
BYTE bControl;
BYTE bTrack;
DWORD dwLoc;
BYTE bInfo;
} TrackInfo;
// Запрос для определения текущего состояния
// устройства чтения CD-ROM
typedef struct _DeviceStatus
{
BYTE bControl;
DWORD dwParam;
} DeviceStatus;
// Запрос для определения общего количества
// секторов на компакт-диске
typedef struct _VolumeSize
{
BYTE bControl;
DWORD dwVolumeSize;
} VolumeSize;
#pragma pack()
// Прототипы функций
void GetCDLetters(BYTE *bLetters);
void CallCDDriver(void *rh, int nCDUnit);
int GetDiskInfo(int nCDUnit);
int GetDeviceStatus(int nCDUnit);
int GetVolumeSize(int nCDUnit);
int GetTrackInfo(int iTrack, int nCDUnit);
void delay(int ms);
// Регистры для вызова функции int86
union REGS rg;
// Количество установленных устройств чтения CD-ROM
int nCDUnits;
// Номер первого устройства чтения CD-ROM
int nCDStartUnit;
// Слово состояния после вызова драйвера CD-ROM
int iStatus;
// Информация о компакт-диске
DiskInfo di;
// Состояние устройства чтения CD-ROM
DeviceStatus ds;
// Объем компакт-диска
VolumeSize vs;
// Информация о дорожке
TrackInfo ti;
BYTE bLetters[26];
// ---------------------------------------------------
// main
// Точка входа в программу
// ---------------------------------------------------
int main()
{
int iRetry;
int i, j;
printf("CDINFO, (c) A. Frolov, 1997\n\n");
// Проверяем, установлена ли программа MSCDEX
rg.x.ax = 0x1500;
rg.x.bx = 0;
int86(0x2f, &rg, &rg);
if(rg.x.bx == 0)
{
printf("MSCDEX is not installed\n");
return -1;
}
else
{
// Сохраняем общее количество устройств чтения CD-ROM
Содержание Назад Вперед