从筛选器驱动程序调用 PoStartNextPowerIrp
从 Windows Vista 开始,不需要调用 PoStartNextPowerIrp ,并且调用此例程不会执行电源管理操作。 但是,在 Windows Server 2003、Windows XP 和 Windows 2000 中,筛选器驱动程序必须为驱动程序收到的每个IRP_MN_QUERY_POWER或IRP_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 堆栈位置之前。 |
不允许。 |