IRP_MN_POWER_SEQUENCE
この IRP は、デバイスの電源シーケンス値を返します。
主要なコード
送信時
ドライバーは、デバイスが実際に特定の電源状態に入ったかどうかを判断するために、最適化としてこの IRP を送信します。 この IRP のサポートは省略可能です。
この IRP を送信するには、ドライバーは、IoAllocateIrp を呼び出して IRP を割り当て、主要な IRP コード IRP_MJ_POWER とマイナー IRP コード IRP_MN_POWER_SEQUENCE を指定する必要があります。 次に、ドライバーは、IoCallDriver (Windows Vista) または PoCallDriver (Windows Server 2003、Windows XP、Windows 2000) を呼び出して、IRP を次の下位ドライバーに渡す必要があります。 電源マネージャーは、この IRP を送信できません。
この IRP の送信元は、IRQL <= DISPATCH_LEVEL で実行されている必要があります。
入力パラメーター
なし。
出力パラメーター
Parameters.PowerSequence は、次のメンバーを持つ POWER_SEQUENCE 構造体を指します。
SequenceD1
デバイスが電源状態 D1 以下になった回数。
SequenceD2
デバイスが電源状態 D2 以下になった回数。
SequenceD3
デバイスが電源状態 D3 になった回数。
シーケンス値は、デバイスが該当する電源状態、またはより低い電源状態になった最小回数を追跡します。
バス ドライバーは、少なくともデバイスが該当する電源状態、またはより低い電源状態になるたびに、SequenceD1、SequenceD2、および SequenceD3 の値をインクリメントします。
I/O 状態ブロック
ドライバーは、要求された情報を返したことを示すために Irp->IoStatus.Status を STATUS_SUCCESS に設定するか、この IRP をサポートしていないことを示す STATUS_NOT_IMPLEMENTED に設定します。
操作
この IRP は、デバイスの電源シーケンス値を返します。 バス ドライバーは必要に応じてこれを処理できます。ファンクション ドライバーとフィルター ドライバーは、必要に応じてこれを送信することができます。
デバイスで状態の変更に時間がかかる場合は、この IRP は便利な最適化を提供しています。 デバイスの電源状態が変更されるたびに、そのバス ドライバーは、その電源状態のシーケンス値をインクリメントします。 バス ドライバーは、起動時にシーケンス値を初期化し、その後も継続的にインクリメントします。0 にリセットする必要はありません。
デバイス ポリシー所有者は、デバイスをシャットダウンする前にシーケンス値を取得するためにこの IRP を 1 回送信し、デバイスに電力を回復するときに新しい値を取得するためにもう一度送信することができます。 2 つの値のセットを比較することで、ドライバーは、デバイスが実際に低電力状態に入ったかどうかを判断できます。 デバイスが電力を失っていなければ、ドライバーは、デバイスが D0 状態に戻ったときに、時間のかかる再初期化を回避することができます。
たとえば、デバイスが D2 状態に達したときに電源を回復するのに長い時間がかかる場合、ドライバーは、デバイスの状態を D2 以下に設定する前に、SequenceD2 の値を保存することができます。 後でデバイスの電力が回復したときに、ドライバーは、新しい SequenceD2 の値とその保存された値を比較して、デバイスの状態が実際に D2 より低くなっているかどうかを判断できます。 値が一致する場合、デバイスは実際には電源状態 D2 以下にならなかったことになり、ドライバーはデバイスの再初期化を回避することができます。
要件
ヘッダー |
Wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |