次の方法で共有


WDF_POWER_POLICY_S0_IDLE_CAPABILITIES列挙 (wdfdevice.h)

[KMDF と UMDF に適用]

WDF_POWER_POLICY_S0_IDLE_CAPABILITIES列挙は、デバイスがアイドリング中に低電力状態になったときにサポートできる機能を識別します。

構文

typedef enum _WDF_POWER_POLICY_S0_IDLE_CAPABILITIES {
  IdleCapsInvalid = 0,
  IdleCannotWakeFromS0,
  IdleCanWakeFromS0,
  IdleUsbSelectiveSuspend
} WDF_POWER_POLICY_S0_IDLE_CAPABILITIES;

定数

 
IdleCapsInvalid
値: 0
内部使用専用です。
IdleCannotWakeFromS0
システムが動作 (S0) 状態である間、デバイスは低電力状態から復帰できません。
IdleCanWakeFromS0
システムが動作 (S0) 状態にある間、デバイスは低電力状態から復帰できます。
IdleUsbSelectiveSuspend
デバイスは USB バスに接続され、 USB 選択的サスペンドをサポートします。 USB に接続されたデバイスが、コンピューターの動作状態にある間にアイドリングとスリープ解除の両方をサポートしている場合は、この値を使用します。 USB デバイスがアイドリングのみをサポートしている場合は、 IdleCannotWakeFromS0 を使用します。 (USB デバイス用のドライバーでは 、IdleCanWakeFromS0 を指定しないでください)。次の例セクションのコード例を参照してください。

Windows XP の場合、フレームワークは、デバイスの USB_CONFIGURATION_DESCRIPTOR 構造でデバイスが リモート ウェイクアップをサポートしていることを示している場合にのみ、USB 選択的中断をサポートします。 Windows Vista 以降のバージョンの Windows の場合、フレームワークでは、デバイスがリモート ウェイクアップをサポートしているかどうかに関係なく、USB 選択的中断がサポートされます。

注釈

WDF_POWER_POLICY_S0_IDLE_CAPABILITIES列挙体は、WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体で使用されます。

次のコード例は、USB デバイスのアイドル状態のサポートを有効にする方法を示しています。 いずれの場合も、STATUS_POWER_STATE_INVALID戻り値は、バス ドライバーがデバイス自体をスリープ解除できないことを報告したことを意味します。

KMDF の例

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&idleSettings,
                                           IdleUsbSelectSuspend);
status = WdfDeviceAssignS0IdleSettings(device,
                                       &idleSettings);
if (status == STATUS_POWER_STATE_INVALID){
    //
    // The device probably does not support wake. 
    // It might support idle without wake.
    //
    idleSettings.IdleCaps = IdleCannotWakeFromS0;
    status = WdfDeviceAssignS0IdleSettings(device,
                                           &IdleSettings);
    if (!NT_SUCCESS(status) {...}
 }
else {...}

UMDF の例

hr = pIWDFDevice2->AssignS0IdleSettings(IdleUsbSelectSuspend,
                                        PowerDeviceD3,
                                        IDLEWAKE_TIMEOUT_MSEC,
                                        IdleAllowUserControl,
                                        WdfTrue);
if (hr == HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)){
    //
    // The device probably does not support wake. 
    // It might support idle without wake.
    //
    hr = pIWDFDevice2->AssignS0IdleSettings(IdleCannotWakeFromS0,
                                         PowerDeviceD3,
                                         IDLEWAKE_TIMEOUT_MSEC,
                                         IdleAllowUserControl,
                                         WdfTrue);
    if (!SUCCEEDED(hr)) {...}
}
else {...}

要件

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

こちらもご覧ください

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS