Чтение IOCTL Input
При помощи команды IOCTL Input программа может получить от драйвера самую разную информацию, начиная от адреса заголовка драйвера и заканчивая информацией о дорожках диска.
Формат заголовка запроса:
// ---------------
// Код команды 3
// ---------------
#pragma pack(1)
typedef struct _IOCTL_Input
{
ReqHdr rh;
BYTE bMediaDescriptor;
DWORD lpTransferAddress;
WORD wDataSize;
WORD wStartSector;
DWORD lpVolID;
} IOCTL_Input;
Заполнение полей заголовка запроса:
Поле | Описание | ||
rh.wStatus | После вызова драйвера содержит слово состояния | ||
bMediaDescriptor | Байт описания среды носителя данных | ||
lpTransferAddress | Адрес буфера | ||
wDataSize | Размер буфера | ||
wStartSector | Номер начального сектора | ||
lpVolID | Указатель на идентификатор тома, если при выполнении команды возникла ошибка с кодом 0Fh |
Команда IOCTL Input может выполнять много функций. Перед вызовом драйвера вы должны подготовить заголовок функции, указав в одном из его полей код выполняемой функции. Адрес и размер этой структуры необходимо записать в поля lpTransferAddress и wDataSize, соответственно.
Рассмотрим форматы заголовков различных функций, выполняемых в рамках команды IOCTL Input.