WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体 (wdfdevice.h)

[KMDF と UMDF に適用]

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体には、デバイスがアイドル状態で、システムがシステムの動作状態 (S0) のときにフレームワークが使用するドライバー提供の情報が含まれています。

構文

typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS {
  ULONG                                 Size;
  WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps;
  DEVICE_POWER_STATE                    DxState;
  ULONG                                 IdleTimeout;
  WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings;
  WDF_TRI_STATE                         Enabled;
  WDF_TRI_STATE                         PowerUpIdleDeviceOnSystemWake;
  WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE    IdleTimeoutType;
  WDF_TRI_STATE                         ExcludeD3Cold;
} WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS;

メンバー

Size

この構造体のサイズ (バイト単位)。

IdleCaps

システム 動作 (S0) 状態のまま、低電力状態に設定された後にデバイスがスリープ解除する機能を識別する、WDF_POWER_POLICY_S0_IDLE_CAPABILITIES型の列挙子。

DxState

アイドル タイムアウト期間が終了した後にデバイスが入力する低電力状態を識別する、DEVICE_POWER_STATE型の列挙子。 DEVICE_POWER_STATE 値は wdm.h で定義されます。

IdleTimeout

フレームワークによって DxState 提供の低電力状態になるまでにデバイスがアイドル状態のままになる時間 (ミリ秒単位)。 フレームワークの既定のアイドル タイムアウト値を使用するには、 IdleTimeoutDefaultValue を指定します。 フレームワークがデバイスをアイドル状態と見なすタイミングの詳細については、「アイドル状態の 電源ダウンのサポート」を参照してください。

UserControlOfIdleSettings

ユーザーがデバイスのアイドル状態の設定を変更できるかどうかを示す、 WDF_POWER_POLICY_S0_IDLE_USER_CONTROL型指定の列挙子。

Enabled

WDF_TRI_STATE型の列挙子。デバイスがアイドル状態のままで、システム電源が S0 の間にデバイスの電源がオフになるかどうかを示します。 このメンバーには、次のいずれかの値を指定できます。

WdfTrue - 電源を切る機能が有効になっています。

WdfFalse - 電源を切る機能は無効です。

WdfUseDefault - 電源の停止は、最初は既定で有効になっています。ただし、 UserControlOfIdleSettings メンバーが IdleAllowUserControl に設定されている場合、 ユーザーの設定またはドライバーの INF ファイル が初期値をオーバーライドします。

電源オフが有効になっている場合、デバイスにウェイクアップ機能があり、アイドル タイムアウト値が期限切れになると、フレームワークはドライバーの EvtDeviceArmWakeFromS0 コールバック関数を呼び出してから、デバイスが低電力状態になります。

PowerUpIdleDeviceOnSystemWake

システム 動作 (S0) 状態に戻ったときにデバイスが動作 (D0) 状態に戻るかどうかを示す、WDF_TRI_STATE型の列挙子。 このメンバーは、ドライバーが IdleCaps メンバーを IdleCannotWakeFromS0 に設定する場合にのみ有効です。 PowerUpIdleDeviceOnSystemWake メンバーには、次のいずれかの値を指定できます。

WdfTrue - デバイスとシステムの両方が低電力状態の場合、システムが動作状態に戻ると、デバイスは動作状態に戻ります。

WdfFalse - デバイスとシステムの両方が低電力状態の場合、システムが動作状態に戻ったときに、デバイスは低電力状態のままです。

WdfUseDefault - ドライバーが別の値を設定していない場合にフレームワークで使用される既定値。 この値の意味は WdfFalse と同じです。

PowerUpIdleDeviceOnSystemWake メンバーが WdfFalse または WdfUseDefault に設定されている場合、アプリケーションがデバイスに I/O 要求を送信するときなど、ソフトウェアがデバイスにアクセスしたときにのみ、デバイスは動作状態に戻ります。 詳細については、「 デバイスが動作状態に戻る」を参照してください。

PowerUpIdleDeviceOnSystemWake メンバーは、バージョン 1.9 以降のバージョンの KMDF で使用でき、バージョン 2.0 の UMDF 以降で使用できます。

IdleTimeoutType

IdleTimeout メンバーの使用方法を示す、WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE型の列挙子。

IdleTimeoutType メンバーは、バージョン 1.11 以降のバージョンの KMDF で使用でき、バージョン 2.0 の UMDF 以降で使用できます。 詳細については、「解説」を参照してください。

ExcludeD3Cold

アイドル タイムアウト期間の有効期限が切れたときにデバイスが入力する低電力状態に対して D3cold 電源状態を許容可能な選択肢にするかどうかを示す、 WDF_TRI_STATE型指定の列挙子。 ExcludeD3Cold メンバーには、次のいずれかの値を指定できます。

WdfTrue - フレームワークは、アイドル タイムアウト期間が経過すると、デバイスを低電力 D 状態に移動します。 その D 状態が D3 の場合、デバイスは D3hot に移動されます。 ExcludeD3ColdWdfTrue に設定されている場合、D3hot から D3cold へのそれ以上の切り替えは許可されません。

WdfFalse - 次のすべての条件が満たされている場合、アイドル タイムアウト期間が経過すると、デバイスは D3cold 電源状態になる可能性があります。

  • この構造体の DxState メンバーは 、PowerDeviceD3 または PowerDeviceMaximum を指定します。
  • ACPI ファームウェアは、デバイスが D3cold 電源状態をサポートしていることを示します。
  • ドライバーがこの構造体の IdleCaps メンバーで IdleCanWakeFromS0 または IdleUsbSelectiveSuspend を指定した場合、デバイスは D3cold 電源状態の間に外部ウェイクアップ イベントに応答できます。 それ以外の場合、この要件は適用されません。
WdfUseDefault - フレームワークは DDInstall を調べますドライバーの INF ファイルの HW セクション。 次の行が存在する場合、この値は WdfFalse と同じ意味を持ちます。
Include = machine.inf
Needs = PciD3ColdSupported
それ以外の場合、この値は WdfTrue と同じ意味を持ちます。

ExcludeD3Cold メンバーは、KMDF バージョン 1.11 以降、および UMDF のバージョン 2.0 以降で使用でき、Windows 8より前のオペレーティング システムでは無視されます。 詳細については、「解説」を参照してください。

注釈

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体は、WdfDeviceAssignS0IdleSettings への入力として使用されます。

ドライバーが WdfDeviceAssignS0IdleSettings を初めて呼び出す場合、次のアクションが発生します。

  • フレームワークには、すべての WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体メンバーの値が格納されます。
  • UserControlOfIdleSettings メンバーが IdleAllowUserControl に設定されていて、Enabled メンバーが WdfUseDefault に設定されている場合、フレームワークはレジストリを読み取って、ユーザーがアイドル状態のときにデバイスの電源を切り下げ有効にしたかどうかを確認します。
WdfDeviceAssignS0IdleSettings の後続の呼び出し中に、フレームワークには DxStateIdleTimeout、Enabled メンバーの値のみが格納されます。 また、KMDF 1.9 以前では、値が IdleUsbSelectiveSuspendでない限り、フレームワークは IdleCaps メンバーの値を格納します。 そのため、ドライバーは次の規則を使用する必要があります。
  • ドライバーが IdleCaps メンバーの値に IdleUsbSelectiveSuspend を指定する場合は、WdfDeviceAssignS0IdleSettings を初めて呼び出す必要があり、その後その値を変更することはできません。
  • ドライバーが WdfDeviceAssignS0IdleSettings を初めて呼び出す際に IdleCanWakeFromS0 または IdleCannotWakeFromS0 を指定した場合、その後 WdfDeviceAssignS0IdleSettings を再度呼び出してその値を変更できます (ただし、値を IdleUsbSelectiveSuspend に変更することはできません)。

KMDF 1.11 および UMDF 2.0 以降では、KMDF ドライバーは IdleUsbSelectiveSuspendIdleCannotWakeFromS0 をいつでも切り替えることができます。

Windows 8以降、IdleTimeoutType メンバーを SystemManagedIdleTimeout または SystemManagedIdleTimeoutWithHint に設定すると、フレームワークは電源管理フレームワーク (PoFx) に登録されます。

ドライバーが複数コンポーネント デバイスの機能電源状態のサポートを実装している場合、ドライバーは IdleTimeoutTypeDriverManagedIdleTimeout に設定するか、 WdfDeviceAssignS0IdleSettings をまったく呼び出さない必要があります。

詳細については、「 機能電源状態のサポート 」および「 Power Management Framework の概要」を参照してください。

DxState メンバーに指定する値には、次の規則が適用されます。

  • 値を PowerDeviceD0 にすることはできません。
  • USB デバイスの場合、値を PowerDeviceD0 または PowerDeviceD3 にすることはできません。
  • PowerDeviceMaximum を指定した場合、フレームワークは、WDF_DEVICE_POWER_CAPABILITIES構造体の DeviceWake メンバーで提供されるデバイスのバスのドライバーの値使用します。
  • IdleCaps メンバーの値が IdleCanWakeFromS0 の場合、バス ドライバーのWDF_DEVICE_POWER_CAPABILITIES構造体の DeviceWake メンバーで、デバイスの電源状態よりも低いデバイスの電源状態を指定することはできません。 (つまり、バス ドライバーの DeviceWake 値が PowerDeviceD2 の場合、関数ドライバーの DxState 値を PowerDeviceD3 にすることはできません)。
Windows 8より前のオペレーティング システムでは、D3 の電源状態は、デバイスが低電力状態にあるものの、バスに対する何らかの電力が維持されていることを示します。 Windows 8以降、以前の D3 電源状態は D3hot と呼ばれ、新しい電源状態 (D3cold) が使用可能になります。 デバイスは、システムが動作中 (S0) 状態であるか低電力状態である間に D3cold 状態に入ることができます。 デバイスが D3cold 電源状態の場合、バスは非アクティブであり、外部アクション (ネットワーク ケーブルに接続するなど) によってハードウェア イベントが発生したときに、デバイスが独自のウェイク 信号をトリガーする必要があります。

KMDF 1.11 および UMDF 2.0 以降では、 アイドル状態の電源ダウンをサポート するデバイスは、この構造体の ExcludeD3Cold メンバーを使用して、D3cold 電源状態が、アイドル タイムアウト期間が終了した後にデバイスが入力する低電力 状態 に対して許容される選択肢であるかどうかを指定できます。

デバイスのアイドル機能を制御するレジストリ エントリの詳細については、「デバイスのアイドル 状態とスリープ解除動作のユーザー制御」を参照してください。

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体を初期化するには、ドライバーで WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT を呼び出す必要があります。

要件

要件
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfdevice.h (Wdf.h を含む)