WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS 構造体 (wdfdevice.h)

[KMDF と UMDF に適用]

WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS構造体には、両方が低電力状態にある場合に、デバイス自体とシステムをスリープ解除するデバイスの機能に関するドライバー提供の情報が含まれています。

構文

typedef struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS {
  ULONG                                 Size;
  DEVICE_POWER_STATE                    DxState;
  WDF_POWER_POLICY_SX_WAKE_USER_CONTROL UserControlOfWakeSettings;
  WDF_TRI_STATE                         Enabled;
  BOOLEAN                               ArmForWakeIfChildrenAreArmedForWake;
  BOOLEAN                               IndicateChildWakeOnParentWake;
} WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS;

メンバー

Size

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

DxState

システムの電源状態がウェイク可能な低電力状態に低下したときにデバイスが入力する低電力状態を識別する、DEVICE_POWER_STATE型の列挙子。 DxState の値を PowerDeviceD0 にすることはできません。 DEVICE_POWER_STATE 値は wdm.h で定義されます。

UserControlOfWakeSettings

ユーザーがデバイスのウェイク設定を変更できるかどうかを示す 、WDF_POWER_POLICY_SX_WAKE_USER_CONTROL型の列挙子。

Enabled

システムが低電力状態のときに、デバイスがシステムをスリープ解除 (つまり、システムを S0 に復元) できるかどうかを示す、WDF_TRI_STATE型の列挙子。 このメンバーには、次のいずれかの値を指定できます。

WdfTrue - システムのスリープ解除が有効になっています。

WdfFalse - システムのスリープ解除が無効になっています。

WdfUseDefault - システムのスリープ解除は、既定で最初に有効になっています。 ただし、UserControlOfWakeSettings メンバーが WakeAllowUserControl に設定されている場合、 ユーザーの設定またはドライバーの INF ファイル は初期値をオーバーライドします。

システムのスリープ解除が有効になっており、システムが低電力状態に入りようとしている場合、フレームワークは、デバイスが低電力状態になる前に、ドライバーの EvtDeviceArmWakeFromSx または EvtDeviceArmWakeFromSxWithReason コールバック関数を呼び出します。

ArmForWakeIfChildrenAreArmedForWake

TRUE に設定されている場合、親デバイス自体をスリープ解除する機能と、デバイスの子デバイスに対してこの機能が有効になっている場合にシステムを有効にする必要があることを示すブール値。 詳細については、「解説」を参照してください。 このメンバーは、バージョン 1.7 以降のバージョンの KMDF で使用できます。

IndicateChildWakeOnParentWake

TRUE に設定されている場合、親デバイスがウェイクアップ信号を検出した場合に、フレームワークが子デバイスにウェイクアップ状態を提供することを示すブール値。 詳細については、「解説」を参照してください。 このメンバーは、バージョン 1.7 以降のバージョンの KMDF で使用できます。

注釈

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

そのWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS構造を初期化するには、ドライバーが WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT を呼び出す必要があります。

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

  • フレームワークには、すべてのWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS構造体メンバーの値 格納されます。
  • UserControlOfWakeSettings メンバーが WakeAllowUserControl に設定されている場合、Enabled メンバーが WdfUseDefault に設定されている場合、フレームワークはレジストリを読み取って、ユーザーがシステムのスリープ解除を有効にしたかどうかを確認します。
WdfDeviceAssignSxWakeSettings の後続の呼び出し中に、フレームワークは UserControlOfWakeSettings メンバーの値を格納しません。 言い換えると、フレームワークは、ドライバーが WdfDeviceAssignSxWakeSettings を初めて呼び出す際に次の手順を実行しますが、後の呼び出しでは実行されません。
  • UserControlOfWakeSettings メンバーの値を格納します。
  • Enabled メンバーの値が WdfUseDefault の場合は、レジストリでユーザー設定を検索します。
DxState メンバーに指定する値には、次の規則が適用されます。
  • 値を PowerDeviceD0 にすることはできません。
  • PowerDeviceMaximum を指定した場合、フレームワークは、WDF_DEVICE_POWER_CAPABILITIES構造体の DeviceWake メンバーで提供されるデバイスのバスのドライバーの値使用します。
  • バス ドライバーのWDF_DEVICE_POWER_CAPABILITIES構造の DeviceWake メンバーで、デバイスの電源状態よりも低いデバイスの電源状態 指定することはできません。 (つまり、バス ドライバーの DeviceWake 値が PowerDeviceD2 の場合、関数ドライバーの DxState 値を PowerDeviceD3 にすることはできません)。
デバイスのスリープ解除機能を制御するレジストリ エントリの詳細については、「 デバイスのアイドル状態とスリープ解除動作のユーザー制御」を参照してください。

WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS構造体が記述するデバイスが親デバイスの場合、親デバイスのドライバーは、次のように ArmForWakeIfChildrenAreArmedForWake メンバーと IndicateChildWakeOnParentWake メンバーを使用できます。

  • ドライバーが ArmForWakeIfChildrenAreArmedForWake メンバーを TRUE に設定した場合、フレームワークは、親デバイスのウェイク機能が有効になっていない場合でも、子デバイスのウェイク機能が有効になっている場合でも、ドライバーの EvtDeviceArmWakeFromSx または EvtDeviceArmWakeFromSxWithReason コールバック関数を呼び出します。

    消費電力を削減するために、ウェイク機能もサポートする子デバイスが接続されていない限り、デバイスのウェイク機能を有効にしたくない場合があります。 ドライバーが ArmForWakeIfChildrenAreArmedForWake メンバーを TRUE に設定している場合、 Enabled メンバーの値には次の意味があります。

    • EnabledWdfFalse の場合、フレームワークは、子デバイスのウェイク機能が有効になっている場合にのみ、ドライバーのウェイク機能を有効にします。
    • EnabledWdfTrue の場合、デバイスにウェイク対応の子デバイスがあるかどうかに関係なく、フレームワークは常にドライバーのウェイク機能を有効にします。
    • EnabledWdfUseDefaultUserControlOfWakeSettingsWakeAllowUserControl の場合、ユーザーはデバイスが常にウェイク対応かどうか、またはデバイスにスリープ解除が有効な子デバイスがある場合にのみスリープ解除が有効になっているかどうかを制御できます。
  • ドライバーが IndicateChildWakeOnParentWake メンバーを TRUE に設定した場合、フレームワークは、親デバイスのドライバーおよび各ウェイク対応子デバイスのドライバーで EvtDeviceWakeFromSxTriggered コールバック関数を呼び出します。 ドライバーがこのメンバーを FALSE に設定した場合、フレームワークは、親デバイスのドライバーでのみ EvtDeviceWakeFromSxTriggered コールバック関数を呼び出します。 デバイスの子のドライバーがハードウェアを調べてシステムが起動された理由を判断する必要がある場合、ドライバーは IndicateChildWakeOnParentWakeを TRUE に設定する必要があります。
デバイスのウェイク機能をサポートする方法の詳細については、「 System Wake-Up のサポート」を参照してください。

要件

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

こちらもご覧ください

EvtDeviceArmWakeFromSx

EvtDeviceArmWakeFromSxWithReason

EvtDeviceWakeFromSxTriggered

WDF_DEVICE_POWER_CAPABILITIES

WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT

WDF_POWER_POLICY_SX_WAKE_USER_CONTROL

WdfDeviceAssignSxWakeSettings

WdfDeviceIndicateWakeStatus