Поддержка Power-Down простоя в драйверах UMDF

Предупреждение

UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. В UMDF 1 новые функции не добавляются, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.

Архивные примеры UMDF 1 можно найти в Windows 11 версии 22H2 — обновление примеров драйверов за май 2022 г.

Дополнительные сведения см. в разделе начало работы с помощью UMDF.

Некоторые устройства могут переходить в спящее состояние, пока система остается в рабочем состоянии. Для таких устройств платформа инициирует снижение энергопотребления устройства после того, как устройство бездействует (не используется) в течение предопределенного (и настраиваемого) периода времени.

Некоторые из этих устройств также могут активировать сигнал пробуждения в шине при обнаружении внешнего события. Водитель автобуса реагирует на этот сигнал, и стек драйверов восстанавливает устройство в рабочее состояние. (Устройства, которые не обнаруживают внешние события, остаются в состоянии низкого энергопотребления до тех пор, пока платформа не попросит водителя шины начать восстановление устройства до его рабочего состояния.)

Если устройство может быть выключено при бездействии, владелец политики питания должен выполнить следующие два действия:

  1. Вызовите IWDFDevice2::AssignS0IdleSettings или IWDFDevice3::AssignS0IdleSettingsEx , чтобы указать:

    • Состояние низкого энергопотребления, в которое будет входить устройство
    • Время, в течение которого устройство должно оставаться в режиме простоя, прежде чем его состояние питания будет понижено.
    • Может ли устройство обнаружить внешнее событие и активировать сигнал пробуждения в шине
    • Могут ли пользователи управлять параметрами простоя устройства
    • Может ли платформа переводить устройство в состояние питания D3cold по истечении времени ожидания простоя

    Если драйвер был создан с использованием платформы версии 1.11 или более поздней, можно вызвать IWDFDevice3::AssignS0IdleSettingsEx вместо IWDFDevice2::AssignS0IdleSettings. В дополнение к описанным выше функциям IWDFDevice3::AssignS0IdleSettingsEx позволяет драйверу указать:

    • Включена или отключена возможность выключения бездействия устройства
    • Возвращается ли устройство в рабочее (D0) состояние при возврате системы в рабочее состояние (S0)
  2. Реализуйте интерфейс IPowerPolicyCallbackWakeFromS0 и следующие функции обратного вызова событий, если они необходимы для устройства:

Платформа считает устройство бездействующим и начинает подсчитывать время простоя при выполнении всех следующих условий:

  • Ни одна из очередей, управляемых питанием, созданных для этого экземпляра устройства, не содержит запросов, ожидающих в очереди или отправленных драйверу. Если запрос был отправлен драйверу, а драйвер отправил его в целевой объект ввода-вывода, запрос по-прежнему связан с очередью, и устройство не будет считаться простаивым. Запросы в очередях, не управляемых питанием, не учитываются при простое устройства.
  • Если драйвер ранее назывался IWDFDevice2::StopIdle, драйвер впоследствии вызывал IWDFDevice2::ResumeIdle.
  • Если владелец политики питания является водителем автобуса, ни одно из дочерних устройств водителя автобуса не находится в D0.

Если драйвер (или пользователь) включает бездействующее выключение для устройства, может потребоваться использовать метод IWDFDevice2::StopIdle . Если устройство находится в рабочем (D0) состоянии, этот метод предотвращает простаивание устройства до тех пор, пока драйвер не вызовет IWDFDevice2::ResumeIdle. Если устройство находится в состоянии низкого энергопотребления, когда драйвер вызывает IWDFDevice2::StopIdle и если система находится в рабочем (S0) состоянии, платформа запрашивает у драйвера шины восстановление устройства до рабочего (D0) состояния. Дополнительные сведения о том, когда драйверу может потребоваться вызывать IWDFDevice2::StopIdle, см. на справочной странице метода.

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

Сведения о записях реестра, которые управляют возможностями простоя устройства, см. в статье Управление пользователем простоя устройства и поведение пробуждения в UMDF.