共用方式為


呼叫 IoCallDriver 與呼叫 PoCallDriver

從 Windows Vista 開始,驅動程式應該呼叫 IoCallDriver 而非 PoCallDriver,將電源 IRP 傳遞給下一個較低的驅動程式。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,驅動程式必須呼叫 PoCallDriver,而非 IoCallDriver,才能將電源 IRP 傳遞至下一個較低的驅動程式。 不過請注意,使用相同程式代碼在 Windows Vista 和舊版 Windows 中執行的驅動程序必須呼叫 PoCallDriver,而不是 IoCallDriver

從 Windows Vista 開始, PoRequestPowerIrpIoCallDriver 可確保電源管理員能正確地同步處理整個系統的電源 IRP。 在 Windows Server 2003、Windows XP 和 Windows 2000、 PoRequestPowerIrpPoCallDriverPoStartNextPowerIrp 中,確保電源管理員能正確同步處理整個系統的電源 IRP。

系統會限制使用中電源 IRP 的數目,如下所示:

  • 在任何特定時間,每個實體裝置物件(PDO)只能有一個系統電源IRP(IRP_MN_SET_POWER、IRP_MN_QUERY_POWER)。

  • 在任何指定的時間,每個 PDO 不得超過一個裝置集電源 IRP(IRP_MN_SET_POWER)。

  • 在系統中的任何時間和任何位置,都不應有超過一個需要突入電流的裝置電源 IRP 處於活躍狀態。

為了確保兩個突入裝置不會同時嘗試啟動,電源管理器會追蹤全系統的作用中突入電源 IRP,且一次只允許一個作用中。 在現有的突入 IRP 完成之前,無法啟動額外的突入 IRP。

由於這些對內流 IRP 的限制,裝置電源 IRP 可能會在另一部裝置的內流 IRP 完成時封鎖。 進行偵錯時,驅動程式開發者應注意此行為。