WDF_POWER_POLICY_S0_IDLE_CAPABILITIES 枚举 (wudfddi_types.h)

[适用于 KMDF 和 UMDF]

WDF_POWER_POLICY_S0_IDLE_CAPABILITIES枚举标识设备在闲行时进入低功耗状态时可以支持的功能。

语法

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

常量

 
IdleCapsInvalid
仅限内部使用。
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
标头 wudfddi_types.h (包括 Wdf.h)

另请参阅

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS