Kernel-Mode 驱动程序框架(KMDF)和 User-Mode 驱动程序框架(UMDF)支持一部分 Windows IRP。 下表列出了主要的 WDM IRP 类型和相应的框架事件回调函数。 除非另有指定,否则回调适用于 KMDF 和 UMDF。
IRP_MJ_PNP的 KMDF 回调
下表列出了与 IRP_MJ_PNP的次要 IRP 代码对应的 KMDF 回调(按执行顺序)。 箭头指示 WDM FDO 在 IRP 在堆栈中向上或向下移动时是否处理该 IRP。
注意 在 KMDF 驱动程序中,即插即用和电源管理是集成作,驱动程序不会收到单个次要 IRP_MJ_PNP 或 IRP_MJ_POWER 请求。 相反,该框架会在启动电源时调用一组核心回调,并在关闭电源时调用相应的一组回调,还会根据每个即插即用请求的需要,在这些核心回调之前和之后调用附加的回调。 有关显示启动和关机序列的完整图表,请参阅移植 PnP 和电源管理功能。
KMDF 对于 IRP_MJ_POWER 的回调
下表列出了与 IRP_MJ_POWER的次要 IRP 代码对应的 KMDF 回调(按执行顺序)。 箭头指示 WDM FDO 在 IRP 在堆栈中向上或向下移动时是否处理该 IRP。
注意 注意:在 KMDF 驱动程序中,即插即用和电源管理是集成作,驱动程序不会收到单个次要 IRP_MJ_PNP 或 IRP_MJ_POWER 请求。 相反,该框架会在启动电源时调用一组核心回调,并在关闭电源时调用相应的一组回调,还会根据每个即插即用请求的需要,在这些核心回调之前和之后调用附加的回调。 有关显示启动和关机序列的完整图表,请参阅移植 PnP 和电源管理功能。
| IRP_MJ_POWER 次要代码 | 框架回调 |
|---|---|
| IRP_MN_SET_POWER 对于 D1、D2 或 D3(降低电源状态) | EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend flag) 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) |