共用方式為


WDM IRP 和 WDF 事件回呼函式

Kernel-Mode Driver Framework (KMDF) 和 User-Mode Driver Framework (UMDF) 支援 Windows IRP 子集。 下表列出主要的 WDM IRP 類型和對應的架構事件回呼函式。 除非另有指定,否則回呼會同時套用至 KMDF 和 UMDF。

主要 IRP 程式碼 WDF 事件回呼函式
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreateEvtIoDefault
IRP_MJ_CREATE_MAILSLOT 無直接支援;僅實作EvtDeviceWdmIrpPreprocess (KMDF)
IRP_MJ_DEVICE_CHANGE 無直接支援;僅實作EvtDeviceWdmIrpPreprocess (KMDF)
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControlEvtIoDefault
IRP_MJ_DIRECTORY_CONTROL 無直接支援;僅實作EvtDeviceWdmIrpPreprocess (KMDF)
IRP_MJ_FILE_SYSTEM_CONTROL 無直接支援;僅實作EvtDeviceWdmIrpPreprocess (KMDF)
IRP_MJ_FLUSH_BUFFERS 無直接支援;僅實作EvtDeviceWdmIrpPreprocess (KMDF)
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControlEvtIoDefault
IRP_MJ_LOCK_CONTROL 無直接支援;僅實作EvtDeviceWdmIrpPreprocess (KMDF)
IRP_MJ_PNP 許多;如需 IRP_MJ_PNP,請參閱 KMDF 回呼
IRP_MJ_POWER 許多;如需 IRP_MJ_POWER,請參閱 KMDF 回呼
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 EvtIoReadEvtIoDefault
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)

對於所有隨插即用裝置物件:不支援;僅實作EvtDeviceWdmIrpPreprocess (KMDF)

IRP_MJ_SYSTEM_CONTROL 建立 WDFWMIPROVIDER 和 WDFWMIINSTANCE 物件,並僅實作 EvtWmiXxx (KMDF) 回呼。
IRP_MJ_WRITE EvtIoWriteEvtIoDefault

IRP_MJ_PNP的 KMDF 回呼

下表依執行順序列出對應至 IRP_MJ_PNP次要 IRP 代碼的 KMDF 回呼。 箭號會指出 WDM FDO 在 IRP 向上或向下移動時,是否會處理 IRP。

注意在 KMDF 驅動程式中,隨插即用和電源管理是整合式作業,而且驅動程式不會收到個別的次要IRP_MJ_PNPIRP_MJ_POWER要求。 相反地,架構會在電源啟動時呼叫核心回呼集,並在關閉電源時呼叫對應的回呼集,並針對每個個別隨插即用要求呼叫此核心集之前和之後的其他回呼。 如需顯示電源啟動和關閉電源序列的完整圖表,請參閱 移植 PnP 和電源管理功能

IRP_MJ_PNP次要程式碼 KMDF 回呼
IRP_MN_CANCEL_REMOVE_DEVICE
IRP_MN_CANCEL_STOP_DEVICE
IRP_MN_DEVICE_USAGE_NOTIFICATION % EvtDeviceUsageNotification
IRP_MN_EJECT ' EvtDeviceEject 僅 (KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements (僅 KMDF)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements (僅 KMDF)
IRP_MN_QUERY_BUS_INFORMATION 無。 KMDF 驅動程式會呼叫 WdfDeviceInitXxx 方法,在初始化期間設定裝置屬性,讓架構可以自行回應此查詢,而不通知驅動程式。
IRP_MN_QUERY_CAPABILITIES 無。 KMDF 驅動程式會呼叫 WdfDeviceInitXxx 方法,在初始化期間設定裝置屬性,讓架構可以自行回應此查詢,而不通知驅動程式。
IRP_MN_QUERY_DEVICE_RELATIONS (匯流排、移除和退出關聯) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT 無。 KMDF 驅動程式會呼叫 WdfDeviceInitXxx 方法,在初始化期間設定裝置屬性,讓架構可以自行回應此查詢,而不通知驅動程式。
IRP_MN_QUERY_ID 無。 KMDF 驅動程式會呼叫 WdfDeviceInitXxx 方法,在初始化期間設定裝置屬性,讓架構可以自行回應此查詢,而不通知驅動程式。
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (KMDF 僅)
IRP_MN_QUERY_PNP_DEVICE_STATE 無。 KMDF 驅動程式會呼叫 WdfDeviceInitXxx 方法,在初始化期間設定裝置屬性,讓架構可以自行回應此查詢,而不需要通知驅動程式。
IRP_MN_QUERY_REMOVE_DEVICE & EvtDeviceQueryRemove
IRP_MN_QUERY_RESOURCE_REQUIREMENTS EvtDeviceResourceRequirementsQuery 僅 (KMDF)
IRP_MN_QUERY_RESOURCES EvtDeviceResourcesQuery (僅 KMDF)
IRP_MN_QUERY_STOP_DEVICE EvtDeviceQueryStop
IRP_MN_READ_CONFIG 無。 KMDF 驅動程式會呼叫 WdfDeviceInitXxx 方法,在初始化期間設定裝置屬性,讓架構可以自行回應此查詢,而不需要通知驅動程式。
IRP_MN_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE之後:

EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend旗標) EvtDmaEnablerSelfManagedIoStop (KMDF 僅) EvtDmaEnablerDisable (KMDF) EvtDmaEnablerFlush (KMDF 僅) EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final狀態) EvtDeviceReleaseHardwareEvtIoStop (適用于電源管理佇列的 WdfRequestStopActionPurge旗標) EvtDeviceSelfManagedIoFlushEvtIoStop (WdfRequestStopActionPurge旗標) 適用于非電源受控佇列的 EvtDeviceSelfManagedIoCleanupEvtCleanupCallback for WDFDEVICE EvtDestroyCallback for WDFDEVICE

IRP_MN_SURPRISE_REMOVAL之後:

EvtIoStop (WdfRequestStopActionPurge 旗標) 非電源管理的佇列 EvtDeviceSelfManagedIoCleanupEvtCleanupCallback for WDFDEVICE EvtDestroyCallback for WDFDEVICE
IRP_MN_SET_LOCK EvtDeviceSetLock (僅 KMDF)
IRP_MN_START_DEVICE

列舉之後:

EvtDeviceRemoveAddedResources (KMDF 僅) EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF 僅) EvtDmaEnablerEnable (KMDF) EvtDmaEnablerSelfManagedIoStart (KMDF) EvtDeviceSelfManagedIoInit

IRP_MN_STOP_DEVICE之後:

EvtDeviceRemoveAddedResources (KMDF 僅) EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnabler 僅 (KMDF) EvtDmaEnablerEnable (僅) EvtDmaEnablerSelfManagedIoStart (KMDF) EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_STOP_DEVICE EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend旗標) EvtDmaEnablerSelfManagedIoStop (僅) EvtDmaEnablerDisable (KMDF) (EvtDmaEnablerFlush (KMDF 僅) EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final狀態) EvtDeviceReleaseHardware
IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend旗標) EvtDmaEnablerSelfManagedIoStop (KMDF) EvtDmaEnablerDisable (僅 KMDF) EvtDmaEnablerFlush (KMDF 僅) EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final狀態) EvtDeviceReleaseHardwareEvtIoStop (WdfRequestStopActionPurge旗標) 適用于電源管理的佇列EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG 無。 KMDF 驅動程式會呼叫 WdfDeviceInitXxx 方法,在初始化期間設定裝置屬性,讓架構可以自行回應此查詢,而不需要通知驅動程式。

適用于 IRP_MJ_POWER 的 KMDF 回呼

下表列出以執行順序,對應至 IRP_MJ_POWER次要 IRP 碼的 KMDF 回呼。 箭號表示 WDM FDO 是否會在 IRP 上移或向下移動時處理 IRP。

注意注意:在 KMDF 驅動程式中,隨插即用和電源管理是整合作業,而且驅動程式不會收到個別次要IRP_MJ_PNPIRP_MJ_POWER要求。 相反地,架構會在電源上呼叫一組核心回呼,並在關閉電源時呼叫對應的回呼,並在此核心設定之前和之後,針對每個個別隨插即用要求呼叫其他回呼。 如需顯示電源啟動和關閉電源序列的完整圖表,請參閱 移植 PnP 和電源管理功能

IRP_MJ_POWER次要程式碼 架構回呼
適用于D1、D2 或 D3 的IRP_MN_SET_POWER (關閉電源) EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend旗標) EvtDeviceArmWakeFromS0EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagedIoStop (僅 KMDF) EvtDmaEnablerDisable (KMDF 僅) EvtDmaEnablerFlush (KMDF) EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
適用于D0 的IRP_MN_SET_POWER (電源) EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF 僅) EvtDmaEnablerEnable (KMDF 僅) EvtDmaEnablerSelfManagedIoStart (KMDF) EvtIoResumeEvtDeviceSelfManagedIoRestart
適用于 Sx IRP_MN_SET_POWER
適用于Sx 的IRP_MN_SET_POWER
IRP_MN_POWER_SEQUENCE
IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (僅 KMDF)
IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (僅 KMDF)