等候/喚醒作業概觀
作業系統的喚醒機制的運作方式如下圖所示。
當系統和裝置處於運作狀態時,裝置的電源原則擁有者會判斷其裝置應該啟用 (「已啟動」) 來喚醒。 電源原則擁有者要求具有次要程式碼的 Power IRP (PoRequestPowerIrpIRP_MN_WAIT_WAKE) 傳送至其 PDO,以通知其裝置堆疊中的所有驅動程式。 在要求中,原則擁有者會指定回呼常式 (與 IoCompletion 常式) 不同。
電源管理員透過 I/O 管理員將 IRP 傳送至裝置堆疊頂端。
驅動程式會設定 IoCompletion 常式,並將 IRP 向下傳遞,直到到達匯流排驅動程式為止。
如果可以,匯流排驅動程式會在實體裝置上啟用喚醒,並標示 IRP 擱置中。 如有必要,它也會要求其父系的等候/喚醒 IRP。
稍後,外部喚醒訊號會抵達。
公車驅動程式會完成 IRP_MN_WAIT_WAKE。
I/O 管理員會呼叫已設定為驅動程式的 IoCompletion 常式,將 IRP 傳遞至堆疊。
I/O 管理員在要求 IRP 時,會呼叫原則擁有者所設定的回呼常式。
IRP_MN_WAIT_WAKE要求不會變更裝置或系統的電源狀態。 它只會在裝置上啟用喚醒,以便稍後,如果裝置進入適當的睡眠狀態,外部訊號會導致裝置 (,而且系統可能) 喚醒。
當喚醒訊號送達時,無論裝置喚醒系統還是只喚醒本身,驅動程式的行為都相同。 如果裝置已啟用喚醒,且系統處於睡眠狀態,裝置可以從中喚醒它,裝置將會喚醒系統。 如果裝置已啟用喚醒,且系統處於工作狀態,則只有裝置會喚醒。
由於電腦和裝置在設計上有所不同,特別是與電源平面有關、支援的系統和裝置電源狀態,因此在所有硬體設定上都不支援等候/喚醒的狀態並不相同。 因此,任何擁有其裝置電源原則的驅動程式和每個匯流排驅動程式都必須仔細注意其執行所在個別組態的功能。 如需詳細資訊,請參閱 判斷裝置是否可以喚醒系統。
如需等候/喚醒作業的進一步詳細資料,請參閱 透過裝置樹狀結構瞭解等候/喚醒 IRP 的路徑 和 等候/喚醒 IRP 完成概觀。