Управление пользователем режимом простоя и пробуждения устройства
Если на устройстве есть возможности выключения питания или пробуждения в режиме бездействия, вы можете решить, следует ли разрешить пользователям включать или отключать эти возможности.
Драйвер может использовать элементы структуры WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , чтобы указать, могут ли пользователи с доступом к реестру включать или отключать возможность отключения бездействующего питания устройства.
Драйвер может использовать элементы структуры WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS , чтобы указать, могут ли пользователи с доступом к реестру включать или отключать функцию пробуждения устройства.
Обе эти структуры позволяют драйверу включить возможность, отключить возможность или предоставить пользователям контроль над возможностями. Чтобы предоставить пользователям управление, в соответствующей структуре параметров драйвер устанавливает для элемента UserControlOfIdleSettings или UserControlOfWakeSettings значение IdleAllowUserControl или WakeAllowUserControl соответственно, а для элемента Enabled — WdfTrue или WdfUseDefault, соответственно.
Если драйвер позволяет пользователям изменять параметры простоя и пробуждения, платформа предоставляет пользовательский интерфейс в виде страницы свойств, на которой диспетчер устройств отображаться, чтобы пользователи могли включать или отключать возможности простоя и пробуждения. (Платформа изменяет значения реестра IdleInWorkingState и WakeFromSleepState . Драйверы и их установочные файлы не должны считывать или изменять эти значения.)
Если пользователь изменяет параметры устройства, платформа при необходимости обновляет состояние питания устройства в соответствии с новыми параметрами. Например, если пользователь отключает возможность отключения бездействующего питания устройства, когда устройство уже находится в состоянии с низким энергопотреблением из-за простоя, платформа возвращает устройство в рабочее состояние.
Если драйвер позволяет пользователям изменять параметры простоя и пробуждения, платформа включает эти параметры по умолчанию. Некоторым авторам драйверов может потребоваться сначала отключить параметры, прежде чем разрешить пользователям изменять их.
Таким образом, для kmdf версии 1.9 и более поздних версий платформа предоставляет два определяемых драйвером значения реестра с именами WdfDefaultIdleInWorkingState и WdfDefaultWakeFromSleepState, которые хранятся в подразделе Device Parameters\WDF устройства в аппаратном ключе устройства. Значения REG_DWORD типа: "0" означает, что возможность отключена, а "1" указывает, что эта возможность включена.
INF-файл драйвера может использовать директиву INF AddReg для создания и задания значений реестра WdfDefaultIdleInWorkingState и WdfDefaultWakeFromSleepState . Например, если драйвер включает возможность выключения бездействующего питания устройства, но если эта возможность должна быть отключена при установке устройства, INF-файл драйвера может задать для WdfDefaultIdleInWorkingState значение "0".
Платформа проверяет значения реестра WdfDefaultIdleInWorkingState и WdfDefaultWakeFromSleepState , только если драйвер установил для элемента UserControlOfIdleSettings или UserControlOfWakeSettings значение IdleAllowUserControl или WakeAllowUserControl соответственно, а для элемента Enabled — WdfTrue или WdfUseDefault в соответствующей структуре параметров.