从筛选器驱动程序调用 PoStartNextPowerIrp

从 Windows Vista 开始,不需要调用 PoStartNextPowerIrp ,并且调用此例程不会执行电源管理操作。 但是,在 Windows Server 2003、Windows XP 和 Windows 2000 中,筛选器驱动程序必须为驱动程序收到的每个IRP_MN_QUERY_POWERIRP_MN_SET_POWER请求调用 PoStartNextPowerIrp 一次。 调用何时发生取决于请求的类型以及驱动程序是失败还是成功请求,如下表所示。

请求的类型 如果驱动程序成功请求,则会发生调用: 如果驱动程序未通过请求,则会发生调用:

IRP_MN_QUERY_POWER (设备电源状态)

IoCompletion 例程中,紧接在返回之前。

DispatchPower 例程中,在调用 IoCompleteRequest 之前。

IRP_MN_QUERY_POWER (系统电源状态)

DispatchPower 例程中,在获取删除锁后和设置 IRP 堆栈位置之前。

DispatchPower 例程中,在调用 IoCompleteRequest 之前。

IRP_MN_SET_POWER (设备电源状态)

IoCompletion 例程中,紧接在返回之前。

不允许。

IRP_MN_SET_POWER (系统电源状态)

DispatchPower 例程中,在获取删除锁后和设置 IRP 堆栈位置之前。

不允许。