正しいデバイス電源状態の判断
電源ポリシー オーナーは、DEVICE_CAPABILITIES 構造体に格納されている DeviceState 配列をチェックして、各システム電源状態のデバイスの電源状態の有効な範囲を決定します。 この配列には、各システムの電源状態ごとに基になるデバイスがサポートできる最高のデバイス電源状態が一覧表示されます。
この範囲から特定の状態を選択する場合は、次の点を考慮してください。
システムが S0 状態になると、ほとんどのデバイスは D0 状態になります。
システムがスリープ状態になると、ほとんどのデバイスは D3 状態になります。 ただし、ウェイクが有効になっているデバイスがこのような状態をサポートしている場合は、代わりに D1 または D2 に移行する必要があります。 詳細については、「デバイスの電源機能のレポート」を参照してください。
休止状態ファイルを保持するデバイスには、特別な規則が適用されます。 システム IRP が PowerSystemHibernate を要求する場合、休止状態ファイルを保持するデバイスの電源をオフにすることはできません。 このようなデバイスの電源ポリシー オーナーは、デバイスの電源状態 D3 を要求してコンテキストを保存する必要がありますが、デバイスのドライバーによってデバイスの電源をオフにしないでください。
システム IRP が PowerSystemShutdown を要求する場合、ドライバーは Irp->Parameters.Power.ShutdownType の POWER_ACTION 値をチェックして、状態変更の理由を判断する必要があります。 詳細については、「システム電源操作」を参照してください。
デバイスが既に正しいデバイスの電源状態にある場合でも、デバイス電源ポリシー オーナーは、各システムの set-power IRP を送信する必要があります。 以前にドライバーが query-power IRP に応答してデバイス操作を中断した場合、set-power IRP は IRP のキューを停止し、現在の電源状態の通常の操作に戻すように通知します。 唯一の例外は、デバイスが D3 状態の場合に発生します。この場合、ドライバーは追加の IRP_MN_SET_POWER 要求を送信して D3 状態に移行する必要はありません。