次の方法で共有


D3cold への遷移の有効化

Windows のすべてのバージョンでは、コンピューターのスリープ中 (システムの低電力状態である S1 から S4 のいずれか) にデバイスを D3cold にできます。 コンピューターが S0 を終了する前に、ファンクション ドライバー、バス ドライバー、フィルター ドライバーが連携してデバイスを D3hot に移動します。 コンピューターが低電力 Sx 状態になると、この遷移は、デバイスを D3hot から D3cold に移動する副作用があります。

Windows 8 以降ハ、コンピューターが S0 のままでモ、デバイスは D3cold に出入りできます。 デバイスの電源ポリシー所有者 (PPO) であるドライバーは、D3cold へのこれらの遷移を有効または無効にすることができます。 ドライバーは、D0 への移行後にデバイスが D3cold から復帰して、通常の操作を再開できない限り、デバイスの D3cold への移行を有効にしてはなりません。

デバイスが D3 に移行すると、最初は D3 の D3hot サブ状態になります。 デバイスは D3hot から D0 または D3cold に移行できます。 ウェイク イベントまたは I/O 要求に対応して、デバイスは D3hot から D0 に移行します。 そうでない場合、デバイスは D3hot の状態を維持するか、D3hot から D3cold に移行することができます。 これらの遷移の詳細については、「デバイスの電源状態」でデバイスの電源状態の図を参照してください。

ドライバーは、D3hot から D3cold へのデバイスの移行を開始しません。 代わりに、この移行は、このデバイスと共通の電源を共有する他のすべてのデバイスが D3hot にあり、D3cold に移行する準備が整っている場合に発生します。 これらのデバイスの最後の 1 台が D3hot 状態になると、基になるバス ドライバーとシステム ファームウェアによって電源が取り外され、デバイスが同時に D3cold に移行します。

デバイスの PPO ドライバーは、デバイスの D3hot から D3cold への移行を有効にするかどうかをオペレーティング システムに通知します。 ドライバーは、デバイスをインストールする INF ファイルにこの情報を提供できます。または、ドライバーは実行時に SetD3ColdSupport ルーチンを呼び出して、デバイスの D3cold への遷移を動的に有効または無効にすることができます。 詳細については、「GUID_D3COLD_SUPPORT_INTERFACE ドライバー インターフェイスの使用」を参照してください。

デバイスの D3cold への移行を有効にすることで、ドライバーは次の動作を保証します。

  • コンピューターを S0 のままにする場合、デバイスは D3hot から D3cold への移行を許容できます。
  • デバイスが D3cold から D0 に戻ると、正常に動作します。

いずれかの要件を満たさないデバイスは、D3cold に入った後、コンピューターが再起動されるかスリープ状態になるまで使用できなくなる可能性があります。 デバイスが低電力 Dx 状態からウェイク イベントを通知できる必要がある場合は、デバイスのウェイク信号が D3cold で動作することをドライバーが確信していない限り、D3cold への移行を有効にしないでください。

デバイスを D3cold にしても、必ずしもデバイスへのすべての電源が除去されるわけではありません。バスを介したデバイスへの通信に使用できる電源がなくなったことを意味するにすぎません。 デバイスは、ウェイク イベントをプロセッサに通知するのに十分な電力を取得できる場合があります。 たとえば、メイン電源が停止しているイーサネット ネットワーク インターフェイス カード (NIC) は、イーサネット ケーブルから電力を得ることができます。

D3cold はバスを使用してデバイスと通信できない状態であるため、ドライバーはデバイスを D3cold に直接移行させることはできません。 代わりに、ドライバーはまず PoRequestPowerIrp ルーチンを呼び出して、D3 電源 IRP (ターゲット状態 = PowerDeviceD3 での IRP_MN_SET_POWER 要求) を要求して、デバイスを D0 から D3hot に移動します。 D3hot への移行の後、デバイスは D3hot から D3cold に移行する場合としない場合があります。 デバイスは、バスへの電源が取り外されたときにのみ D3cold に移行します。この状態は、親バス ドライバーがバスをオフにした場合、またはシステム ファームウェアがハードウェア プラットフォームのセクションの電源をオフにした場合に発生します。