Поддержка PnP и управления питанием в драйверах функций
Драйверы функций управляют работой устройства и поэтому имеют доступ к оборудованию устройства. Эти драйверы должны поддерживать операции PnP и управления питанием и обычно регистрировать несколько функций обратного вызова событий при создании объектов устройств.
Как правило, основная функция драйвера EvtDriverDeviceAdd вызывает WdfDeviceInitSetPnpPowerEventCallbacks для регистрации следующих функций обратного вызова:
EvtDevicePrepareHardware, который предоставляет ресурсы, назначенные системой устройству, драйверу. Драйвер может выполнять такие операции, как сопоставление памяти устройства, связанной с шиной, в виртуальное адресное пространство процессора, что делает оборудование доступным для драйвера.
EvtDeviceD0Entry, которая выполняет такие операции, как загрузка встроенного ПО, необходимых при каждом входе устройства, управляемого драйвером, в рабочее состояние (D0).
EvtDeviceD0Exit, которая выполняет операции, необходимые каждый раз, когда устройство драйвера покидает рабочее состояние (D0) и входит в состояние низкой мощности.
EvtDeviceReleaseHardware, который освобождает все системные ресурсы, которые были выделены EvtDevicePrepareHardware.
Как и все функции обратного вызова, определяемые фреймворком, перечисленные в предыдущем списке, являются необязательными. Вам нужно предоставить их только в том случае, если ваш водитель нуждается в них.
Драйверы функций могут вызывать WdfDeviceSetPnpCapabilities и WdfDeviceSetPowerCapabilities, чтобы сообщить операционной системе о возможностях устройства в плане PnP и управления питанием.
Как правило, вы будете использовать энергосберегающие очереди ввода-вывода фреймворка для большинства запросов ввода-вывода. Если очередь ввода-вывода управляется питанием, платформа отправляет запросы драйверу только в том случае, если устройство находится в рабочем состоянии (D0). Дополнительные сведения об очередях ввода-вывода с управлением питанием см. в Управление питанием для очередей ввода-вывода.
Обычно драйвер функции устройства является владельцем политики управления питанием для стека драйверов. Владелец политики питания определяет соответствующее состояние питания устройства для устройства и отправляет запросы в стек драйверов устройства всякий раз, когда состояние питания устройства должно измениться. Для драйверов на основе платформы платформа обрабатывает эту ответственность, поэтому вам не нужно предоставлять код в драйвере для запроса изменений в состоянии питания устройства.
Владелец политики питания имеет две дополнительные обязанности: он управляет возможностью устройства переходить в состояние низкой мощности при простое, при этом система остается в своем рабочем состоянии (S0), а также управляет возможностью устройства создавать сигнал пробуждения при обнаружении внешнего события в состоянии низкой мощности. Если устройство имеет возможности простоя или пробуждения, драйвер функции может предоставить дополнительные функции обратного вызова. Дополнительные сведения об обязанностях владельца политики энергопотребления см. в Владелец политики энергопотребления.