呼叫 PoStartNextPowerIrp
從 Windows Vista 開始,不需要呼叫 PoStartNextPowerIrp ,而且此常式的呼叫不會執行任何電源管理作業。 不過,在 Windows Server 2003、Windows XP 和 Windows 2000 中,驅動程式在處理查詢電源 IRP 或設定電源 IRP 之後,驅動程式必須呼叫 PoStartNextPowerIrp ,以通知電源管理員已準備好接收另一個電源 IRP。 驅動程式必須呼叫 PoStartNextPowerIrp ,而 IRP 堆疊位置指向目前的驅動程式,而且在呼叫 PoCallDriver之前。
驅動程式必須針對每個 IRP_MN_QUERY_POWER 或 IRP_MN_SET_POWER 要求呼叫此常式一次, 處理IRP_MN_WAIT_WAKE或IRP_MN_POWER_SEQUENCE要求時,驅動程式不需要呼叫PoStartNextPowerIrp。
當驅動程式呼叫 PoStartNextPowerIrp時,目前的 IRP 堆疊位置必須指向目前的驅動程式。 一般而言,此呼叫最好是從 IoCompletion 常式進行。 必須在IoCompleteRequest、IoSkipCurrentIrpStackLocation和PoCallDriver之前呼叫PoStartNextPowerIrp。 以其他順序呼叫常式可能會導致系統死結。
即使驅動程式失敗 IRP,仍必須呼叫 PoStartNextPowerIrp ,通知電源管理員已準備好處理另一個電源 IRP。
下列各節會厘清每個驅動程式類型應呼叫此常式的時機: