次の方法で共有


デバイス電源ポリシー所有者のシステム電源設定 IRP の処理

システムの設定電源 IRP に応答して、デバイス スタックの電源ポリシー所有者は、デバイス スタックを適切なデバイスの電源状態にします。

一般的な規則として、デバイス電源ポリシーの所有者がシステム電源状態の IRP_MN_SET_POWER を受け取ると、システムの設定電源 IRP をデバイス スタックに渡すことによって応答する必要があります。 デバイスの電源ポリシー所有者は、IoCompletion ルーチン内の対応するデバイス電源状態に対してデバイス スタック IRP_MN_SET_POWER を送信して応答する必要もあります。 スタック内のすべてのドライバーがデバイス設定電源 IRP を完了した後、デバイスの電源ポリシー所有者は、システムの設定電源 IRP を完了します。

ただし、システム再開のパフォーマンスを高めるには、子デバイスがないデバイスのデバイス電源所有者が、別の方法を使用して、システムがスリープ状態から動作状態 S0 に戻るまでにかかる時間を短縮する必要があります。 この場合、システムを動作状態 S0 に戻すシステム設定電源 IRP に応答して、デバイス電源ポリシーの所有者は、次の一連の操作を実行する必要があります。

  1. ドライバーの DispatchPower ルーチンで S0 システム電源状態の IRP_MN_SET_POWER IRP を受け取った後、IRP の IoCompletion ルーチンを設定し、IRP をスタックに渡します。

  2. 手順 (1) で設定された IoCompletion ルーチンで、対応するデバイスの電源状態の IRP_MN_SET_POWER IRP を要求し、システムの設定電源 IRP をすぐに完了します。 ドライバーは、システムの設定電源 IRP を完了する前に、デバイスの設定電源 IRP が完了するまで待機しないでください。 IoCompletion ルーチンは、下位レベルのすべてのドライバーがシステム設定電源 IRP を完了し、システム設定電源 IRP がドライバーの機能デバイス オブジェクト (FDO) に戻された後に実行されます。

  3. 必要なデバイス固有の初期化を実行します。

  4. 手順 (2) で送信されたデバイス設定電源 IRP を完了します。

  5. デバイスがデバイス スリープ状態のときにキューに登録された I/O 要求を処理します。

カーネル電源マネージャーには、IRP ディスパッチ キューの限られたセットがあり、システムの動作状態 S0 に戻るシステム内のすべてのデバイスをすばやく通知する必要があります。 可能な限りすばやくシステム設定電源 IRP を完了できないドライバーは、システムの電源状態遷移中にシステムの全体的なパフォーマンスに悪影響を与える可能性がある他のデバイスがシステム設定電源 IRP を取得することを防ぎます。

システムの設定電源 IRP の処理について詳しくは、以下を参照してください。

正しいデバイス電源状態の判断

システム電源設定 IRP への応答におけるデバイス電源設定 IRP の送信