次の方法で共有


SET_D3COLD_SUPPORT コールバック関数 (wdm.h)

SetD3ColdSupport コールバック ルーチンは、D3cold デバイスの電源状態への切り替えを有効または無効にします。

構文

SET_D3COLD_SUPPORT SetD3coldSupport;

void SetD3coldSupport(
  [in, optional] PVOID Context,
  [in]           BOOLEAN D3ColdSupport
)
{...}

パラメーター

[in, optional] Context

インターフェイス固有のコンテキスト情報へのポインター。 呼び出し元は、インターフェイスのD3COLD_SUPPORT_INTERFACE構造体の Context メンバーの値にこのパラメーターを設定します。

[in] D3ColdSupport

D3hot から D3cold への切り替えを許可するかどうか。 これらの切り替えを有効にするには 、TRUE に設定します。 それ以外の場合は、FALSE に設定 します。 詳細については、「解説」を参照してください。

戻り値

なし

解説

デバイスの電源ポリシー所有者 (PPO) であるドライバーは、このルーチンを呼び出して、コンピューターが S0 (動作中) システムの電源状態にあり、S0 を終了する準備をしていないときに発生する可能性がある D3cold サブ状態への切り替えを有効または無効にすることができます。

デバイスが入力した低電力 Dx 状態からウェイク イベントを通知できる必要がある場合、デバイスがこのサブ状態からウェイク イベントを通知できない限り、このデバイスのドライバーは D3cold サブ状態への遷移を有効にしないでください。 それ以外の場合、D3cold を入力すると、コンピューターが再起動するかスリープ状態から復帰するまで、デバイスは使用できなくなります。

デバイスのドライバーは 、GetIdleWakeInfo ルーチンを呼び出して、デバイスが D3cold からウェイク イベントを通知できるかどうかを判断できます。

必要に応じて、デバイスのドライバーは、一連の SetD3ColdSupport 呼び出しを行って、動的に変化する条件に応じて D3cold 遷移を交互に有効または無効にすることができます。

たとえば、グラフィックス デバイスには、D3cold から D0 への移行後に復元する大規模なハードウェア コンテキストがある場合があります。 このコンテキストの復元に必要な時間は、ユーザーが現在実行している一連のタスクによって許容される場合とできない場合があります。 さらに、復元時間は、このタスクの組み合わせによって異なる場合があります。 ドライバーでは、タスク ミックスの変化に応じて D3cold への切り替えを動的に有効または無効にする必要がある場合があります。

デバイスは D3cold サブ状態を D3hot サブ状態からのみ入力できます。 ドライバーが SetD3ColdSupport を呼び出して D3hot から D3cold への切り替えを有効にすると、デバイスが D3hot に入った後に D3cold と入力される場合と入力されない場合があります。 ウェイク イベントに応答して、デバイスは D3cold を通過することなく D3hot から D0 を直接入力する可能性があります。

デバイスが D3hot から D3cold に移行すると、他の数のデバイスと共有する電源がオフになっている可能性があります。 これらのデバイスが D3cold に入ってからしばらくすると、いずれかのデバイスのドライバーが D0 への移行を要求する場合があります。 この要求に応じて、親バス ドライバーまたは ACPI フィルター ドライバーが電源をオンにし、電源を共有するすべてのデバイスが既定の電源オン状態になります。

この電源状態の変更を想定するデバイス ドライバーは、変更を要求したドライバーだけです。 他のデバイスのドライバーは、D0 で動作するようにデバイスを適切に初期化できるように、この変更の通知を受け取る必要があります。 この通知を受け取ることができるドライバーのみが、デバイスで D3cold を入力できるようにする必要があります。 それ以外の場合、ドライバーはデバイスがいつ D0 に入ったかわからない。

Windows 8以降、WDM ドライバーはデバイスを電源フレームワーク (PoFx) に登録し、デバイスが D0 に入ると DevicePowerRequiredCallback ルーチンによって通知を受け取ることができます。 同様に、KMDF ドライバーは、そのデバイスを PoFx に登録し、 EvtDeviceD0Entry イベント コールバックによって通知を受け取ることができます。

デバイスを PoFx に登録していないドライバーは、デバイスがスリープ解除のために武装している場合でも、D0 への移行を通知できます。 バス ドライバーがデバイスの電源をオンにすると、ドライバーの IRP_MN_WAIT_WAKE 要求が完了します。 これに対して、ドライバーは D0 で動作するようにデバイスを初期化します。

複数のデバイスで共有されている電源がオンになった後、ドライバーが D0 への移行を要求したデバイスが、これらのデバイスのうち、作業を行う唯一のデバイスである可能性があります。 他のデバイスはアイドル状態である可能性が高く、その場合、ドライバーはしばらくすると、これらのデバイスを D3hot に移動します。

ドライバーが SetD3ColdSupport を呼び出して D3cold への切り替えを無効にした場合、D0 はデバイスが D3hot から入力できる唯一のデバイス電源状態です。

ドライバーが SetD3ColdSupport を呼び出して D3cold への切り替えを有効にすると、他の理由でこれらの遷移が無効になる可能性があります。 ドライバーは 、GetD3ColdCapability ルーチンを呼び出して、デバイスが D3cold サブ状態に入ることができるかどうかを判断できます。 ただし、ドライバーはこの情報を必要としないことがあります。 デバイスが D3cold に入力できない場合、 SetD3ColdSupport の呼び出しは効果はありませんが、無害です。

SetD3ColdSupport ルーチンは、コンピューターが S0 状態にある (終了する準備をしていない) ときに発生する可能性がある D3hot から D3cold への遷移にのみ影響します。 このルーチンは、コンピューターが S0 を終了し、低電力システム状態に入る準備をしている場合には影響しません。 D3hot サブ状態のデバイスは、コンピューターがシステムの低電力状態になる直前に、常に D3cold サブ状態に入る場合があります。

既定では、 SetD3ColdSupport ルーチンの最初の呼び出しの前に、D3hot-to-D3cold 遷移は無効になります。 この既定値を変更して、最初の SetD3ColdSupport 呼び出しの前に D3hot-to-D3cold 遷移を有効にするには、デバイスのドライバー パッケージに、ドライバーをインストールする INF ファイルの DDInstall.HW セクションに次の 2 行を含めることができます。

Include = machine.inf
Needs = PciD3ColdSupported

Windows 8は、コンピューターが S0 状態のまま D3cold サブ状態を開始および終了できるデバイスをサポートする Windows の最初のバージョンです。 詳細については、「 デバイスの Low-Power 状態」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 8以降で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

D3COLD_SUPPORT_INTERFACE

DevicePowerRequiredCallback

EvtDeviceD0Entry

GetD3ColdCapability

IRP_MN_WAIT_WAKE