Share via


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

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位欄位會指定驅動程式在電腦關閉或進入休眠之前收到系統電源 IRP 的最後一個系統電源狀態轉換。 EffectiveSystemState位欄位會指出使用者認為裝置的有效先前系統電源狀態。 例如,如果驅動程式收到暫止系統轉換至休眠狀態的通知,但後續發生混合式關機, TargetSystemStateEffectiveSystemState 值可能不相符。

如需詳細資訊,請參閱 SYSTEM_POWER_STATE_CONTEXT

準備快速啟動

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

  1. 首先,如同完整關機,Windows 會關閉所有應用程式,並登出所有使用者會話。 在這個階段中,沒有應用程式正在執行,但會載入 Windows 核心,而且系統會話正在執行。
  2. 接下來,電源管理員會將系統電源 IRP 傳送給設備磁碟機,告知他們準備其裝置進入休眠狀態。
  3. 最後,Windows 會將核心記憶體映射儲存 (,包括載入的核心模式驅動程式) Hiberfil.sys並關閉電腦。

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