Поделиться через


Обработка IRP, которую платформа не поддерживает

[Применимо только к KMDF]

Платформа не поддерживает запросы ввода-вывода, имеющие следующие основные коды IRP:

Если платформа получает IRP, содержащую один из этих кодов функций ввода-вывода, платформа не обрабатывает IRP. Если драйвер является драйвером фильтра, платформа передает IRP следующему нижнему драйверу в стеке драйверов. Если драйвер не является драйвером фильтра, фреймворк вызывает IoCompleteRequest для завершения IRP со значением состояния STATUS_INVALID_DEVICE_REQUEST.

Если драйвер должен обрабатывать IRPs, содержащие любой из этих кодов функций ввода-вывода, драйвер должен вызвать WdfDeviceInitAssignWdmIrpPreprocessCallback, чтобы зарегистрировать функцию обратного вызова EvtDeviceWdmIrpPreprocess для кода функции ввода-вывода.

Когда драйвер получает IRP, содержащий код функции ввода-вывода, для которого драйвер зарегистрировал функцию обратного вызова EvtDeviceWdmIrpPreprocess, платформа передает IRP этой функции обратного вызова. Затем функция обратного вызова должна обработать IRP, следуя правилам WDM для обработки IRP. Драйвер должен вызвать IoCompleteRequest, чтобы завершить IRP, или вызвать IoCallDriver, чтобы передать IRP следующему драйверу ниже.

Пример функции обратного вызова EvtDeviceWdmIrpPreprocess, которая обрабатывает IRP, не поддерживаемый фреймворком, можно найти в примере драйвера Serial.