共用方式為


區分快速啟動與自休眠喚醒

Windows 中有三種啟動模式:

  • 冷(傳統)

  • 從休眠喚醒

  • 快速 (結合前兩個,在 Windows 8 中引進)

為了區分快速啟動與喚醒與休眠狀態,內核模式設備驅動器可以檢查 系統電源 IRP

在冷啟動期間,開機載入器會藉由將 Windows 核心檔案的區段載入記憶體並連結,以建構核心記憶體映像。 接下來,核心會設定核心系統函式、列舉連接至計算機的裝置,並載入驅動程式。

相反地,快速啟動只會將休眠檔案 (Hiberfil.sys) 載入記憶體。 快速啟動通常會花費比冷啟動少得多的時間。

若要區分快速啟動與從休眠喚醒,驅動程式可以檢查系統 set-power (IRP_MN_SET_POWER) IRP 中的資訊,以通知驅動程式計算機已進入 S0(工作)狀態。 此 IRP 中的驅動程式 I/O 堆疊位置 包含 Power 成員,這是包含電源相關信息的結構。 從 Windows Vista 開始, Power 成員結構包含 SystemPowerStateContext 成員,這是包含先前系統電源狀態相關信息 的SYSTEM_POWER_STATE_CONTEXT 結構。 這項資訊會在 SYSTEM_POWER_STATE_CONTEXT 結構的位字段中編碼。

SYSTEM_POWER_STATE_CONTEXT 結構中的大部分位字段都保留供系統使用,且驅動程式不透明。 不過,此結構包含兩個位字段 TargetSystemStateEffectiveSystemState,可供驅動程式讀取,以判斷是否發生快速啟動或從休眠喚醒。

TargetSystemStateEffectiveSystemState 位欄會設定為 SYSTEM_POWER_STATE 列舉值。 如果 TargetSystemState = PowerSystemHibernateEffectiveSystemState = PowerSystemHibernate,則已發生從休眠喚醒。

不過,如果 TargetSystemState = PowerSystemShutdownEffectiveSystemState = PowerSystemHibernate,就會發生快速啟動。

TargetSystemState 位欄位指定驅動程式收到的最後一個系統電源狀態轉換,該轉換發生於電腦關機或進入休眠之前。 EffectiveSystemState 位欄位會指出裝置的實際的先前系統電源狀態,如使用者所感知。 例如,如果驅動程式收到暫止系統轉換至休眠狀態的通知,但隨後發生混合式關機, 則 TargetSystemStateEffectiveSystemState 值可能不相符。

如需詳細資訊,請參閱 SYSTEM_POWER_STATE_CONTEXT

準備快速啟動

為了準備快速啟動,Windows 會執行完整的關機順序,並儲存休眠檔案。

  1. 首先,如同完整關機,Windows 會關閉所有應用程式,並註銷所有用戶會話。 在這個階段,沒有應用程式正在執行,但會載入 Windows 核心,而且系統會話正在執行。

  2. 接下來,電源管理員會將系統電源 IRP 傳送至設備驅動器,告知其準備裝置進入休眠狀態。

  3. 最後,Windows 會在 Hiberfil.sys 中儲存核心記憶體映射(包括載入的核心模式驅動程式),並關閉電腦。

如果裝置的驅動程式根據是否發生冷啟動或休眠喚醒而以不同的方式設定裝置,則此驅動程式應該在快速啟動之後設定裝置,就像發生冷啟動一樣。 例如,系統提供的 NDIS 驅動程式會在快速啟動時停用迷你埠喚醒功能,但不會在休眠喚醒時停用。