Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
03.06.2014
Размер:
2.63 Mб
Скачать

Получение информации о подканале

// ---------------

// Код функции 13

// ---------------

#pragma pack(1)

typedef struct _QInfo

{

BYTEbFunctionCode;

DWORD dwStartSector;

DWORD dwTransferAddress;

DWORD dwNumberOfSectors;

} QInfo;

Поле

Описание

bFunctionCode

Код функции

dwStartSector

Адрес начального сектора

dwTransferAddress

Адрес в оперативной памяти, по которому будет скопирована информация из подканала

dwNumberOfSectors

Количество секторов, которые необходимо скопировать

Получение штрих-кода изготовителя компакт-диска

// ---------------

// Код функции 14

// ---------------

#pragma pack(1)

typedef struct _UPCCode

{

BYTEbFunctionCode;

BYTE bCtrlAndARD;

BYTE bUPCCode[7];

BYTE bZero;

BYTE bAFrame;

} UPCCode;

Поле

Описание

bFunctionCode

Код функции

bCtrlAndARD

Формат дорожек

bUPCCode

Штрих-код

bZero

Равно 0

bAFrame

Значение AFRAME

Сброс входных буферов

Команда освобождает все входные буферы и отменяет все запущенные команды.

Формат заголовка запроса:

// ---------------

// Код команды 7

// ---------------

#pragma pack(1)

typedef struct _Flush

{

ReqHdr rh;

} Flush;

Заполнение полей заголовка запроса:

Поле

Описание

rh.wStatus

После вызова драйвера содержит слово состояния

ЗаписьIoctl Output

При помощи команды IOCTL Output программа может заставить драйвер выполнять различные операции, такие как управление механизмом извлечения компакт-диска.

Формат заголовка запроса:

// ---------------

// Код команды 12

// ---------------

#pragma pack(1)

typedef struct _IOCTL_Output

{

ReqHdr rh;

BYTE bMediaDescriptor;

DWORD lpTransferAddress;

WORD wDataSize;

WORD wStartSector;

DWORD lpVolID;

} IOCTL_Output;

Заполнение полей заголовка запроса:

Поле

Описание

rh.wStatus

После вызова драйвера содержит слово состояния

bMediaDescriptor

Байт описания среды носителя данных, должен быть равен нулю

lpTransferAddress

Адрес буфера

wDataSize

Размер буфера

wStartSector

Номер начального сектора, должен быть равен нулю

lpVolID

Указатель на идентификатор тома, если при выполнении команды возникла ошибка с кодом 0Fh

Рассмотрим форматы заголовков различных функций, выполняемых в рамках команды IOCTL Output.

Извлечение компакт-диска

// ---------------

// Код функции 0

// ---------------

#pragma pack(1)

typedef struct _EjectDisk

{

BYTEbFunctionCode;

} EjectDisk;

Поле

Описание

bFunctionCode

Код функции

Блокирование и разблокирование компакт-диска в устройстве

// ---------------

// Код функции 1

// ---------------

#pragma pack(1)

typedef struct _LockDisk

{

BYTEbFunctionCode;

BYTEbLock;

} LockDisk;

Поле

Описание

bFunctionCode

Код функции

bLock

1 – блокирование компакт-диска;

0 – разблокирование компакт-диска

Соседние файлы в папке несколько программ