共用方式為


呼叫 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 的數目,如下所示:

  • (IRP_MN_SET_POWER一個以上的系統電源 IRP,IRP_MN_QUERY_POWER) 在任何指定時間都 可用於 PDO) 的每個實體裝置物件 (。

  • 在任何指定的時間,每個 PDO 都不能有一個以上的裝置設定電源 IRP (IRP_MN_SET_POWER)

  • 在系統的任何指定時間,不可以有一個以上的裝置電源 IRP 需要啟動電源。

為了確保兩個內嵌裝置不會同時嘗試啟動,電源管理員會追蹤整個系統的作用中內嵌電源 IRP,而且一次只能有一個作用中。 在作用中內rush IRP 完成之前,無法啟動額外的內擷取 IRP。

由於內嵌 IRP 的限制,裝置電源 IRP 可能會在另一部裝置的內嵌 IRP 完成時封鎖。 偵錯時,驅動程式寫入器應該注意此行為。