Функция WdfDeviceAssignS0IdleSettings (wdfdevice.h)

[Применимо к KMDF и UMDF]

Метод WdfDeviceAssignS0IdleSettings предоставляет предоставленные драйвером сведения, которые платформа использует, когда устройство находится в состоянии простоя и система находится в рабочем состоянии (S0).

Синтаксис

NTSTATUS WdfDeviceAssignS0IdleSettings(
  [in] WDFDEVICE                              Device,
  [in] PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
);

Параметры

[in] Device

Дескриптор объекта устройства платформы.

[in] Settings

Указатель на структуру, предоставляемую вызывающим WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS .

Возвращаемое значение

Если операция выполнена успешно, WdfDeviceAssignS0IdleSettings возвращает STATUS_SUCCESS. К дополнительным возвращаемым значениям относятся:

Код возврата Описание
STATUS_INVALID_DEVICE_REQUEST
Вызывающий драйвер не является владельцем политики питания устройства.
STATUS_INVALID_PARAMETER
Обнаружено недопустимое значение параметров .
STATUS_INFO_LENGTH_MISMATCH
Неправильный размер структуры WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS .
STATUS_POWER_STATE_INVALID
Это значение возвращается, если происходит одно из следующих действий:
  • Структура WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS содержит недопустимое состояние питания устройства.
  • Элемент IdleCaps структуры WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS указывает, что устройство может самостоятельно разбудиться, но водитель шины указывает, что устройство не может разбудить себя.
  • Начиная с KMDF версии 1.11, работающей на Windows 8, платформа проверяет, может ли встроенное ПО системы обрабатывать сигнал пробуждения, пока система находится в состоянии полного включения (S0). Если компьютер не проверка, WdfDeviceAssignS0IdleSettings возвращает STATUS_POWER_STATE_INVALID, и устройство остается в состоянии полного включения (D0), пока система остается в S0.

    В этом случае драйвер не должен возвращать значение состояния ошибки из EvtDriverDeviceAdd или любого другого обратного вызова среды выполнения. Драйвер может записывать в журнал ошибку, указывающую на то, что устройство будет потреблять больше энергии, чем обычно.

 

Метод может возвращать другие значения NTSTATUS.

Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Комментарии

Если драйвер задает элемент IdleTimeoutTypeWDF_DEVICE_POWER_POLICY_IDLE_SETTINGSSystemManagedIdleTimeout или SystemManagedIdleTimeoutWithHint, он должен вызвать WdfDeviceAssignS0IdleSettings перед возвратом из EvtDeviceD0Entry. Как правило, драйвер сначала вызывает WdfDeviceAssignS0IdleSettings из EvtDriverDeviceAdd.

Дополнительные вызовы WdfDeviceAssignS0IdleSettings можно выполнить в любое время. Однако после того, как драйвер задает значение элемента IdleTimeoutType в своем первом вызове WdfDeviceAssignS0IdleSettings, он не должен изменять это значение в последующих вызовах этого метода.

Если драйвер регистрируется для асинхронных уведомлений в EvtDriverDeviceAdd (например, путем вызова PoRegisterPowerSettingCallback или IoRegisterPlugPlayNotification), драйвер не должен впоследствии вызывать WdfDeviceAssignS0IdleSettings из подпрограммы обратного вызова драйвера, которую он зарегистрировал.

Дополнительные сведения см. в разделе Поддержка выключения бездействующего включения.

Примеры

В следующем примере кода инициализируется структура WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , устанавливается значение времени ожидания простоя в 10 секунд и вызывается метод WdfDeviceAssignS0IdleSettings.

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS  idleSettings;
NTSTATUS  status = STATUS_SUCCESS;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
                                           &idleSettings,
                                           IdleCanWakeFromS0
                                           );
idleSettings.IdleTimeout = 10000;

status = WdfDeviceAssignS0IdleSettings(
                                       device,
                                       &idleSettings
                                       );
if (!NT_SUCCESS(status)) {
    return status;
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfdevice.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf), FDOPowerPolicyOwnerAPI(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NonFDONotPowerPolicyOwnerAPI(kmdf)

См. также раздел

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings