個別裝置的電源 IRP
裝置電源 IRP會指定主要 IRP 程式碼IRP_MJ_POWER、下列其中一個次要電源 IRP 代碼,以及Power.Type成員中的DevicePowerState值。
裝置堆疊中的所有驅動程式都會收到這類 IRP;一般而言,只有裝置電源原則管理員可以傳送這些 IRP。 不過,電源管理員可以在代表裝置執行閒置偵測時傳送裝置電源 IRP,如 使用 Power Manager 常式進行閒置偵測中所述。
驅動程式會基於下列任何原因傳送裝置電源 IRP:
查詢或變更裝置電源狀態以回應系統電源 IRP
將裝置置於睡眠狀態以節省電源
在裝置進入睡眠狀態之後,將裝置傳回工作狀態
讓裝置能夠喚醒以回應外部訊號
在啟動裝置時取得電源順序值
下圖顯示傳送、轉寄和完成裝置電源 IRP 時所發生的步驟順序。
如上圖所示,裝置電源 IRP 會在下列步驟中傳送、轉寄和完成:
裝置電源原則擁有者會呼叫 PoRequestPowerIrp 來配置裝置電源 IRP,並指定要在 IRP 完成時叫用之目標 PDO 和回呼常式。
電源管理員會配置裝置電源 IRP,並將它傳送至目標 PDO 裝置堆疊中的頂端驅動程式。
驅動程式會執行下列動作:
視需要設定 IoCompletion 常式。
如果未使用完成常式,請呼叫 PoStartNextPowerIrp (Windows Server 2003、Windows XP 和 Windows 2000) 。 從 Windows Vista 開始,不需要此呼叫,因此呼叫不會執行任何電源管理作業。
呼叫 IoCallDriver (Windows 7 和 Windows Vista) ,或呼叫 PoCallDriver (Windows Server 2003、Windows XP 和 Windows 2000) ,將 IRP 向下傳遞至下一個較低的驅動程式。
堆疊中的每個驅動程式都會執行這項作業,直到 IRP 到達匯流排驅動程式為止。 如果驅動程式必須失敗 IRP,它應該立即執行,並呼叫 IoCompleteRequest。
維護裝置 PDO 的匯流排驅動程式會執行要求的動作,然後呼叫 IoCompleteRequest 來完成 IRP。 如果裝置已移除或正在移除,匯流排驅動程式可能會使裝置電源啟動 IRP 失敗。
I/O 管理員會呼叫驅動程式在將 IRP 傳遞至堆疊時所設定的 IoCompletion 常式。 呼叫所有 IoCompletion 常式之後,就會執行回呼常式。
如需裝置電源 IRP 的詳細資訊,請參閱管理具有Wake-Up功能的個別裝置和支援裝置。 如需電源順序 IRP 的詳細資訊,請參閱 IRP_MN_POWER_SEQUENCE。