處理系統電源狀態的IRP_MN_QUERY_POWER

電源管理員會在Parameters.Power.Type中傳送具有次要 IRP 程式碼IRP_MN_QUERY_POWERSystemPowerState的電源 IRP,以判斷是否可以安全地變更為指定的系統電源狀態 (S1-S5) ,並允許驅動程式準備進行這類變更。

可能的話,電源管理員會在傳送要求較低 () 狀態的 IRP_MN_SET_POWER 之前查詢。 不過,如果電池故障或電力即將遺失,電源管理員會在不先查詢的情況下傳送設定電源 IRP。 電源管理員永遠不會在傳送 IRP 之前傳送查詢,以在 S0) (設定系統的工作狀態。

如需裝置電源原則擁有者如何處理系統查詢電源要求的相關資訊,請參閱 在裝置電源原則擁有者中處理系統Query-Power IRP

如需驅動程式 (不是裝置電源原則擁有者) 處理系統查詢電源要求的相關資訊,請參閱下列各項:

處理篩選或函式驅動程式中的系統Query-Power IRP

篩選或函式驅動程式中的系統Query-Power IRP 失敗

處理匯流排驅動程式中的系統Query-Power IRP

請注意,驅動程式絕對不能傳送裝置 IRP_MN_SET_POWER 要求以回應系統查詢;只有在收到系統設定電源要求之後,才會要求這類 IRP。

因為電源管理員會將系統查詢 IRP 傳送至系統上的每個裝置堆疊,所以某個裝置的驅動程式可能會失敗查詢,而其他裝置的驅動程式則會順利完成。 從 Windows Vista 開始,系統電源狀態變更為睡眠狀態是重大電源狀態變更。 即使驅動程式失敗系統查詢電源 IRP,Windows Vista 中的電源管理員仍可能會將系統電源狀態變更為睡眠狀態。 此外,當查詢作用中時,電池可能會過期,而需要立即關機。 因此,在查詢 IRP 之後,驅動程式必須準備好接收下列任何電源 IRP:

  • 查詢狀態的IRP_MN_SET_POWER

  • 不同電源狀態的IRP_MN_SET_POWER

  • 目前電源狀態的IRP_MN_SET_POWER

  • 任何狀態的IRP_MN_QUERY_POWER

不過,驅動程式通常會在系統查詢 IRP 之後收到系統設定電源 IRP。 不論為何,驅動程式都必須準備好變更系統電源狀態,即使驅動程式失敗查詢電源 IRP 也一樣。