Управление пользователем над поведением устройства в режиме простоя и пробуждения в 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.
Если у устройства есть возможности простоя или пробуждения, вы можете решить, должны ли пользователи включать или отключать эти возможности.
Драйвер на основе UMDF может использовать метод IWDFDevice2::AssignS0IdleSettings, чтобы указать, могут ли пользователи с доступом к реестру включить или отключить возможность простоя устройства.
Драйвер может использовать метод IWDFDevice2::AssignSxWakeSettings, чтобы указать, могут ли пользователи с доступом к реестру включить или отключить возможность пробуждения устройства.
Оба этих метода позволяют драйверу включить эту возможность, отключить ее или предоставить пользователям контроль над возможностями:
Когда драйвер вызывает метод AssignS0IdleSettings, он может предоставить пользователям контроль над возможностями простоя устройства, установив для параметра UserControlOfIdleSettings значение IdleAllowUserControl и установив для параметра Enabled значение WdfTrue или WdfUseDefault.
Когда драйвер вызывает метод AssignSxWakeSettings, он может предоставить пользователям управление возможностями пробуждения устройства, установив параметр UserControlOfWakeSettings в WakeAllowUserControl и параметр Enabled в WdfTrue или WdfUseDefault.
Если драйвер позволяет пользователям изменять параметры простоя и пробуждения, платформа предоставляет пользовательский интерфейс в виде страницы листа свойств, отображаемой диспетчером устройств, чтобы пользователи могли включить или отключить возможности простоя и пробуждения. (Платформа изменяет значения реестра IdleInWorkingState и WakeFromSleepState. Драйверы и их файлы установки не должны считывать или изменять эти значения.)
Если пользователь изменяет параметры устройства, платформа обновляет состояние питания устройства в соответствии с новыми параметрами при необходимости. Например, если пользователь отключает функцию простоя устройства при отключении питания, пока устройство уже находится в состоянии низкой мощности, так как оно неактивно, платформа возвращает устройство в рабочее состояние.
Если драйвер позволяет пользователям изменять параметры простоя и пробуждения, платформа включает эти параметры по умолчанию. Разработчики драйверов могут захотеть сначала отключить параметры, прежде чем разрешить пользователям их изменять.
Поэтому версии 1.9 и более поздних версий платформы предоставляют два значения реестра, определяемые драйвером, именованные WdfDefaultIdleInWorkingState и WdfDefaultWakeFromSleepState, которые хранятся в подразделе "Параметры устройства\WDF", в аппаратного ключа устройства. Значения типа REG_DWORD, где "0" указывает, что возможность отключена, а "1" указывает, что возможность включена.
INF-файл драйвера может использовать директиву INF INF AddReg для создания и задания значений реестра WdfDefaultIdleInWorkingState и WdfDefaultWakeFromSleepState. Например, если драйвер активирует возможность отключения устройства при простое, но при установке устройства эту возможность необходимо отключить, inf-файл драйвера может задать WdfDefaultIdleInWorkingState значение "0".
Платформа проверяет значение реестра WdfDefaultIdleInWorkingState только в том случае, если драйвер задает параметр UserControlOfIdleSettings в IdleAllowUserControl и параметр Enabled в WdfTrue или WdfUseDefault, когда драйвер вызывает метод IWDFDevice2::AssignS0IdleSettings.
Платформа проверяет значения реестра WdfDefaultWakeFromSleepState только если драйвер устанавливает параметр UserControlOfWakeSettings в IWakeAllowUserControl и параметр Enabled в WdfTrue или WdfUseDefault, когда драйвер вызывает метод IWDFDevice2::AssignSxWakeSettings.