Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
Платформа не поддерживает запросы ввода-вывода, имеющие следующие основные коды IRP:
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
- IRP_MJ_DEVICE_CHANGE
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_INFORMATION
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_QUERY_VOLUME_INFORMATION
- IRP_MJ_SET_EA
- IRP_MJ_SET_INFORMATION
- IRP_MJ_SET_QUOTA
- IRP_MJ_SET_SECURITY
- IRP_MJ_SET_VOLUME_INFORMATION
Если платформа получает 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.