Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Kernel-Mode Driver Framework (KMDF) и User-Mode Driver Framework (UMDF) поддерживают часть Windows IRPs. В следующей таблице перечислены основные типы WDM IRP и соответствующие функции обратного вызова событий фреймворка. Если не указано иначе, обратные вызовы применяются как к KMDF, так и к UMDF.
| Основной код IRP | Функция обратного вызова событий WDF |
|---|---|
| IRP_MJ_CLEANUP | EvtFileCleanup |
| IRP_MJ_CLOSE | EvtFileClose |
| IRP_MJ_CREATE | EvtDeviceFileCreate или EvtIoDefault |
| IRP_MJ_CREATE_MAILSLOT | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_DEVICE_CHANGE | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_DEVICE_CONTROL | EvtIoDeviceControl или EvtIoDefault |
| IRP_MJ_DIRECTORY_CONTROL | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_FILE_SYSTEM_CONTROL | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_FLUSH_BUFFERS | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_INTERNAL_DEVICE_CONTROL | EvtIoInternalDeviceControl или EvtIoDefault |
| IRP_MJ_LOCK_CONTROL | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_PNP | Много; см. коллбеки KMDF для IRP_MJ_PNP. |
| IRP_MJ_POWER | Много; см. обратные вызовы KMDF для IRP_MJ_POWER. |
| IRP_MJ_QUERY_EA | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_QUERY_INFORMATION | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_QUERY_QUOTA | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_QUERY_SECURITY | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_QUERY_VOLUME_INFORMATION | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_READ | EvtIoRead или EvtIoDefault |
| IRP_MJ_SET_EA | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_SET_INFORMATION | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_SET_QUOTA | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_SET_SECURITY | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_SET_VOLUME_INFORMATION | Нет прямой поддержки; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF) |
| IRP_MJ_SHUTDOWN | Для объектов устройств управления реализуйте EvtDeviceShutdownNotification (только KMDF) Для всех объектов устройств Plug and Play: не поддерживается; реализуйте EvtDeviceWdmIrpPreprocess (только KMDF). |
| IRP_MJ_SYSTEM_CONTROL | Создайте объекты WDFWMIPROVIDER и WDFWMIINSTANCE и реализуйте обработчики обратных вызовов EvtWmiXxx (только KMDF). |
| IRP_MJ_WRITE | EvtIoWrite или EvtIoDefault |
Обратные вызовы KMDF для IRP_MJ_PNP
В следующей таблице перечислены в порядке выполнения обратные вызовы KMDF, соответствующие дополнительным кодам IRP для IRP_MJ_PNP. Стрелки указывают, обрабатывает ли FDO WDM IRP по мере перемещения вверх или вниз по стеку.
Примечание В драйвере KMDF поддержка Plug and Play и управление питанием интегрированы, и драйвер не получает индивидуальных IRP_MJ_PNP или IRP_MJ_POWER запросов. Вместо этого фреймворк вызывает основной набор обратных вызовов в момент включения питания и соответствующий набор в момент выключения питания, а также дополнительные обратные вызовы до и после основного набора, если это необходимо для каждого отдельного запроса Plug and Play. Подробные схемы, показывающие последовательности включения и выключения питания, см. в разделе Перенос функциональности PnP и управления питанием.
Обратные вызовы KMDF для IRP_MJ_POWER
В следующей таблице в порядке выполнения перечислены обратные вызовы KMDF, соответствующие дополнительным кодам IRP для IRP_MJ_POWER. Стрелки указывают, обрабатывает ли FDO WDM IRP по мере перемещения вверх или вниз по стеку.
Примечание Примечание. В драйвере KMDF подключаемые модули и управление питанием интегрированы, и драйвер не получает отдельных незначительных IRP_MJ_PNP или IRP_MJ_POWER запросов. Вместо этого фреймворк вызывает основной набор обратных вызовов в момент включения питания и соответствующий набор в момент выключения питания, а также дополнительные обратные вызовы до и после основного набора, если это необходимо для каждого отдельного запроса Plug and Play. Подробные схемы, показывающие последовательности включения и выключения питания, см. в разделе Перенос функциональности PnP и управления питанием.
| IRP_MJ_POWER минорный код | Обратные вызовы фреймворка |
|---|---|
| →IRP_MN_SET_POWER для D1, D2 или D3 (питание отключено) | EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend флаг) EvtDeviceArmWakeFromS0 или EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagedIoStop (только KMDF)EvtDmaEnablerDisable (только KMDF)EvtDmaEnablerFlush (только KMDF)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit |
| ↑IRP_MN_SET_POWER для D0 (повышение мощности) | EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (только KMDF)EvtDmaEnablerEnable (только KMDF)EvtDmaEnablerSelfManagedIoStart (только KMDF)EvtIoResumeEvtDeviceSelfManagedIoRestart |
| →IRP_MN_SET_POWER для Sx | Нет |
| ^IRP_MN_SET_POWER для Sx | Нет |
| IRP_MN_POWER_SEQUENCE | Нет |
| →IRP_MN_WAIT_WAKE | EvtDeviceEnableWakeAtBus (только KMDF) |
| ↑IRP_MN_WAIT_WAKE | EvtDeviceDisableWakeAtBus (только KMDF) |