The PoStartNextPowerIrp routine signals the Power Manager that the driver is ready to handle the next power IRP.
VOID
PoStartNextPowerIrp(
IN PIRP Irp
);
None
Declared in wdm.h and ntddk.h. Include wdm.h or ntddk.h.
PoStartNextPowerIrp must be called by every driver in the device stack.
Calling this routine indicates that the driver is finished with the previous power IRP, if any, and is ready to handle the next power IRP. It must be called once by each driver for every IRP_MN_QUERY_POWER or IRP_MN_SET_POWER request.
Although power IRPs are completed only once, typically by the bus driver for a device, each driver in the device stack must call PoStartNextPowerIrp as the IRP travels down or back up the stack. Even if a driver fails the IRP, the driver must nevertheless call PoStartNextPowerIrp to signal the Power Manager that it is ready to handle another power IRP.
The driver must call PoStartNextPowerIrp while the current IRP stack location points to the current driver. Therefore, this routine must be called before IoCompleteRequest, IoSkipCurrentIrpStackLocation, and PoCallDriver. As a general rule, a driver should call PoStartNextPowerIrp from its IoCompletion routine associated with the IRP or from the callback routine it passed to PoRequestPowerIrp.
Bus drivers must call PoStartNextPowerIrp before completing each IRP.
Callers of PoStartNextPowerIrp must be running at IRQL <= DISPATCH_LEVEL.
IoCompleteRequest, IoSkipCurrentIrpStackLocation, IRP, IRP_MJ_POWER, IRP_MN_QUERY_POWER, IRP_MN_SET_POWER, PoCallDriver, PoRequestPowerIrp