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 に設定されている場合、フレームワークはレジストリを読み取って、ユーザーがシステムのスリープ解除を有効にしたかどうかを確認します。
- UserControlOfWakeSettings メンバーの値を格納します。
- Enabled メンバーの値が WdfUseDefault の場合は、レジストリでユーザー設定を検索します。
- 値を 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 メンバーの値には次の意味があります。
- Enabled が WdfFalse の場合、フレームワークは、子デバイスのウェイク機能が有効になっている場合にのみ、ドライバーのウェイク機能を有効にします。
- Enabled が WdfTrue の場合、デバイスにウェイク対応の子デバイスがあるかどうかに関係なく、フレームワークは常にドライバーのウェイク機能を有効にします。
- Enabled が WdfUseDefault で UserControlOfWakeSettings が WakeAllowUserControl の場合、ユーザーはデバイスが常にウェイク対応かどうか、またはデバイスにスリープ解除が有効な子デバイスがある場合にのみスリープ解除が有効になっているかどうかを制御できます。
- ドライバーが IndicateChildWakeOnParentWake メンバーを TRUE に設定した場合、フレームワークは、親デバイスのドライバーおよび各ウェイク対応子デバイスのドライバーで EvtDeviceWakeFromSxTriggered コールバック関数を呼び出します。 ドライバーがこのメンバーを FALSE に設定した場合、フレームワークは、親デバイスのドライバーでのみ EvtDeviceWakeFromSxTriggered コールバック関数を呼び出します。 デバイスの子のドライバーがハードウェアを調べてシステムが起動された理由を判断する必要がある場合、ドライバーは IndicateChildWakeOnParentWakeを TRUE に設定する必要があります。
要件
要件 | 値 |
---|---|
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | wdfdevice.h (Wdf.h を含む) |
こちらもご覧ください
EvtDeviceArmWakeFromSxWithReason
WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT