Заголовок IRP
Ниже перечислены поля заголовка, к которым можно обращаться из программного кода драйвера. К другим полям заголовка обращаться не рекомендуется.
Таблица 8.5. Заголовок пакета IRP
Поля | Описание |
IO_STATUS_BLOCK IoStatus | Код состояния (статус) запроса |
PVOID AssociatedIrp.SystemBuffer | Указатель на системный буфер для случая, если устройство поддерживает буферизированный ввод/вывод |
PMDL MdlAddress | Указатель на MDL список в случае, если устройство поддерживает прямой ввод/вывод |
PVOID UserBuffer | Адрес пользовательского буфера для ввода/вывода |
BOOLEAN Cancel | Индикатор того, что пакет IRP должен быть аннулирован |
Фрагмент структуры IRP под названием IoStatus фиксирует окончательное состояние данной операции ввода/вывода. Когда драйвер готов завершить обработку пакета IRP, он устанавливает в поле IoStatus.Status значение STATUS_XXX. В поле IoStatus.Information этого блока записывается 0 (если произошла ошибка) или другое определенное операцией ввода/вывода значение, чаще всего — количество переданных/полученных байт данных (которое может быть и равно нулю).
Вопросы адресации и доступа к буферам данных, описываемых пакетом IRP, будут рассмотрены позже.