перечисление 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, только если структура USB_CONFIGURATION_DESCRIPTOR устройства показывает, что устройство поддерживает удаленное пробуждение. Для 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 (include Wdf.h) |