PoStartNextPowerIrp 函数 (wdm.h)
PoStartNextPowerIrp 例程向电源管理器表明驱动程序已准备好处理下一个电源 IRP。 仅 (Windows Server 2003、Windows XP 和 Windows 2000。)
语法
void PoStartNextPowerIrp(
[in, out] PIRP Irp
);
参数
[in, out] Irp
指向在其中IRP_MJ_POWER主要函数代码的 IRP 的指针。
返回值
无
备注
从 Windows Vista 开始,驱动程序不需要调用 PoStartNextPowerIrp ,并且调用此例程不会执行电源管理操作。 但是,在 Windows Server 2003、Windows XP 和 Windows 2000 上,设备堆栈中的每个驱动程序都必须调用 PoStartNextPowerIrp 后,驱动程序完成之前的电源 IRP(如果有),并准备好处理下一个电源 IRP。 每个驱动程序必须针对每个 IRP_MN_QUERY_POWER 或 IRP_MN_SET_POWER 请求调用一次。
尽管电源 IRP 仅完成一次(通常由设备的总线驱动程序完成),但当 IRP 向下传输或备份堆栈时,设备堆栈中的每个驱动程序都必须调用 PoStartNextPowerIrp 。 即使驱动程序未能通过 IRP,驱动程序也必须调用 PoStartNextPowerIrp ,以向电源管理器发出信号,它已准备好处理另一个电源 IRP。
当当前 IRP 堆栈位置指向当前驱动程序时,驱动程序必须调用 PoStartNextPowerIrp 。 因此,必须在 IoCompleteRequest、 IoSkipCurrentIrpStackLocation 和 PoCallDriver 之前调用此例程。 一般情况下,驱动程序应从其与 IRP 关联的 IoCompletion 例程或从传递给 PoRequestPowerIrp 的回调例程调用 PoStartNextPowerIrp。
在完成每个 IRP 之前,总线驱动程序必须调用 PoStartNextPowerIrp 。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=DISPATCH_LEVEL |