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
标头 wdfdevice.h (包括 Wdf.h)

另请参阅

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS