待機/ウェイク操作の概要
オペレーティング システムのウェイクアップ メカニズムは、次の図に示すように機能します。
システムとデバイスが動作状態にある間、デバイスの電源ポリシー所有者は、ウェイクアップのために自身のデバイスを有効にすること ("準備" すること) を判断します。 電源ポリシー所有者は、そのデバイス スタックにあるすべてのドライバーに通知するために、自身の PDO に電源 IRP (軽微なコード IRP_MN_WAIT_WAKE を伴う PoRequestPowerIrp) を送信することを要求します。 ポリシー所有者は、この要求でコールバック ルーチン (IoCompletion ルーチンとは別のルーチン) を指定します。
電源マネージャーは、I/O マネージャーを通じてデバイス スタックの先頭に IRP を送信します。
各ドライバーは IoCompletion ルーチンを設定し、バス ドライバーに達するまでこの IRP を渡します。
バス ドライバーは、物理デバイスのウェイクアップが可能であればそれを有効にして、保留中の IRP をマークします。 必要に応じて、その親の待機/ウェイク IRP も要求します。
しばらくして、外部ウェイクアップ信号が到着します。
バス ドライバーが IRP_MN_WAIT_WAKE を完了します。
I/O マネージャーは、ドライバーがスタックに IRP を渡したときに設定された IoCompletion ルーチンを呼び出します。
I/O マネージャーは、この IRP を要求したときにポリシー所有者によって設定されたコールバック ルーチンを呼び出します。
IRP_MN_WAIT_WAKE 要求によってデバイスやシステムの電源状態が変わることはありません。 この要求によってデバイスでウェイクアップが有効になるにすぎません。適切なスリープ状態になったデバイスは、外部信号またはシステムによってウェイクアップします。
ウェイクアップ信号が到着した場合は、デバイスがシステムをウェイクアップするか自身をウェイクアップするかに関係なく、ドライバーの動作は同じです。 デバイスでウェイクアップが有効になっていて、デバイスからウェイクアップできるスリープ状態にシステムがある場合、システムはそのデバイスによってウェイクアップします。 デバイスでウェイクアップが有効になっていてシステムが動作状態の場合は、デバイスのみがウェイクアップします。
コンピューターとデバイスは特に電源プレーンの設計が異なることから、システムとデバイスのそれぞれでサポートされている電源状態および待機/ウェイトをサポートできる電源状態は、すべてのハードウェアで必ずしも同じにはなりません。 したがって、自身のデバイスとすべてのバス ドライバーの電源ポリシーを所有するドライバーは、自身の動作場所となる個々の構成が持つ機能に注意する必要があります。 詳細については「デバイスがシステムをウェイクできるかどうかの判断」を参照してください。
待機/ウェイク操作の詳細については「デバイス ツリーを通じた待機/ウェイク IRP のパスの概要」と「待機/ウェイク IRP 完了の概要」を参照してください。