休止状態からのウェイクと高速スタートアップの区別Distinguishing Fast Startup from Wake-from-Hibernation

Windows 8 以降では、高速スタートアップモードを使用して、従来のコールドスタートで通常必要とされるよりも短時間でコンピューターを起動することができます。Starting with Windows 8, a fast startup mode is available to start a computer in less time than is typically required for a traditional, cold startup. 高速スタートアップとは、コールド起動と休止状態からの復帰を組み合わせたものです。A fast startup is a hybrid combination of a cold startup and a wake-from-hibernation startup. 多くの場合、カーネルモードのデバイスドライバーは、デバイスがユーザーの期待どおりに動作するように、高速スタートアップと休止状態からの復帰を区別する必要があります。Frequently, kernel-mode device drivers need to distinguish fast startups from wake-from-hibernation so that their devices behave as users expect. この区別を行うために、ドライバーは システムの電源 irpで使用できる情報を使用できます。To make this distinction, drivers can use information that is available in system power IRPs.

コールド起動中、ブートローダーは、Windows カーネルファイルのセクションをメモリに読み込み、それらをリンクすることで、カーネルメモリイメージを構築します。During a cold startup, the boot loader constructs a kernel memory image by loading the sections of the Windows kernel file into memory and linking them. 次に、カーネルはコアシステム関数を構成し、コンピューターに接続されているデバイスを列挙し、ドライバーを読み込みます。Next, the kernel configures core system functions, enumerates the devices attached to the computer, and loads drivers for them.

これに対して、高速スタートアップは、休止状態ファイル (Hiberfil.sys) をメモリに読み込み、以前に保存された Windows カーネルおよび読み込まれたドライバーのイメージを復元します。In contrast, a fast startup simply loads the hibernation file (Hiberfil.sys) into memory to restore the previously saved image of the Windows kernel and loaded drivers. 高速スタートアップは、コールドスタートよりも大幅に時間がかかる傾向があります。A fast startup tends to take significantly less time than a cold startup.

高速スタートアップの準備として、Windows は、完全シャットダウンシーケンスと休止状態の準備の要素を組み合わせたハイブリッドシャットダウンシーケンスを実行します。To prepare for a fast startup, Windows performs a hybrid shutdown sequence that combines elements of a full shutdown sequence and a prepare-for-hibernation sequence. まず、完全なシャットダウンと同様に、Windows はすべてのアプリケーションを閉じ、すべてのユーザーセッションからログオフします。First, as in a full shutdown, Windows closes all applications and logs off all user sessions. この段階では、システム状態は、起動したばかりのコンピューターと似ていますが、アプリケーションは実行されていませんが、Windows カーネルが読み込まれ、システムセッションが実行されています。At this stage, the system state is similar to that of a computer that has just started up—no applications are running, but the Windows kernel is loaded and the system session is running. 次に、電源マネージャーは、デバイスドライバーにシステム電源 Irp を送信し、デバイスが休止状態に入る準備をするように指示します。Next, the power manager sends system power IRPs to device drivers to tell them to prepare their devices to enter hibernation. 最後に、Windows は、カーネルメモリイメージ (読み込まれたカーネルモードドライバーを含む) を Hiberfil.sys に保存し、コンピューターをシャットダウンします。Finally, Windows saves the kernel memory image (including the loaded kernel-mode drivers) in Hiberfil.sys and shuts down the computer.

既定では、Windows 8 はコールドスタートの代わりに高速スタートアップを使用します。By default, Windows 8 uses a fast startup in place of a cold startup. 通常、高速スタートアップとコールドスタートの違いはユーザーが無視できますが、ユーザーの期待に応えるために、高速スタートアップはコールドスタートと同じように動作します。Users can typically ignore the differences between fast and cold startups, but, to meet users' expectations, fast startups should behave the same as cold startups. 特に、コールド起動の場合と同じように、コンピューターに接続されているデバイスを高速スタートアップ用に同じように構成する必要があります。In particular, the devices attached to the computer should be configured the same for a fast startup as they would be for a cold startup.

デバイスのドライバーで、コールドスタートまたは休止状態が発生したかどうかによってデバイスが異なる方法で構成されている場合、このドライバーでは、高速スタートアップの後に、コールド起動 (休止状態からではなく) としてデバイスを構成する必要があります。If the driver for a device configures the device differently depending on whether a cold startup or a wake-from-hibernation occurred, this driver should, after a fast startup, configure the device as though a cold startup (instead of a wake-from-hibernation) occurred. たとえば、システムによって提供される NDIS ドライバーは、高速起動時にミニポートウェイクアップ機能を無効にしますが、休止状態からは無効にします。For example, the system-supplied NDIS driver disables miniport wake capabilities on a fast startup but not on a wake-from-hibernation.

復帰と休止状態からの高速スタートアップを区別するために、ドライバーは、コンピューターが S0 (動作) 状態になったことをドライバーに通知するシステムセット-電源 (Irp) irp の情報を検査できます。** _ _ _ **To distinguish a fast startup from a wake-from-hibernation, a driver can inspect the information in the system set-power (IRP_MN_SET_POWER) IRP that informs the driver that the computer has entered the S0 (working) state. この IRP 内のドライバーの i/o スタックの場所 には、電源に関連する情報を含む構造体である 電源 メンバーが含まれています。The driver's I/O stack location in this IRP contains a Power member, which is a structure that contains power-related information. Windows Vista 以降では、 電源 メンバー構造に Systempowerstatecontext メンバーが含まれています。これは、以前のシステム電源の状態に関する情報を含む システム _ 電源 _ 状態の _ コンテキスト 構造です。Starting with Windows Vista, the Power member structure contains a SystemPowerStateContext member, which is a SYSTEM_POWER_STATE_CONTEXT structure that contains information about the previous system power states. この情報は、 システムの _ 電源 _ 状態 _ コンテキスト 構造のビットフィールドでエンコードされます。This information is encoded in bit fields in the SYSTEM_POWER_STATE_CONTEXT structure.

システムの _ 電源 _ 状態 _ コンテキスト構造のビットフィールドの大部分は、システムで使用するために予約されており、ドライバーに対しては非透過的です。Most of the bit fields in the SYSTEM_POWER_STATE_CONTEXT structure are reserved for system use and are opaque to drivers. ただし、この構造体には、 TargetsystemstateEffectiveSystemStateという2つのビットフィールドが含まれており、これをドライバーで読み取って、高速スタートアップまたは休止状態からの復帰が発生したかどうかを判断できます。However, this structure contains two bit fields, TargetSystemState and EffectiveSystemState, that can be read by drivers to determine whether a fast startup or a wake-from-hibernation occurred.

TargetsystemstateおよびEffectiveSystemStateビットフィールドは、システム _ 電源 _ 状態の列挙値に設定されます。The TargetSystemState and EffectiveSystemState bit fields are set to SYSTEM_POWER_STATE enumeration values. Targetsystemstate = powersystemhibernateEffectiveSystemState = powersystemhibernateの場合、休止状態から復帰します。If TargetSystemState = PowerSystemHibernate and EffectiveSystemState = PowerSystemHibernate, a wake-from-hibernation occurred.

ただし、 targetsystemstate = powersystemshutdownEffectiveSystemState = powersystemshutdownの場合、高速スタートアップが発生しました。However, if TargetSystemState = PowerSystemShutdown and EffectiveSystemState = PowerSystemHibernate, a fast startup occurred.

Targetsystemstateビットフィールドは、コンピューターがシャットダウンまたは休止状態になる前に、ドライバーがシステム電源 IRP を受信した最後のシステム電源状態の移行を指定します。The TargetSystemState bit field specifies the last system power state transition for which the driver received a system power IRP before the computer shut down or entered hibernation. EffectiveSystemStateビットフィールドは、ユーザーが認識している、デバイスの以前のシステム電源の有効な状態を示します。The EffectiveSystemState bit field indicates the effective previous system power state of the device, as perceived by the user. たとえば、ドライバーが保留中のシステム遷移の通知を休止状態にしたが、その後にハイブリッドシャットダウンが発生した場合、 TargetsystemstateEffectiveSystemState の値が一致しない可能性があります。The TargetSystemState and EffectiveSystemState values might not match if, for example, the driver received notification of a pending system transition to the hibernation state, but a hybrid shutdown subsequently occurred.

詳細については、「 システム _ 電源 _ 状態の _ コンテキスト」を参照してください。For more information, see SYSTEM_POWER_STATE_CONTEXT.