Поддержка PnP и управления питанием в драйверах функций

Драйверы функций управляют работой устройства и, следовательно, получают доступ к оборудованию устройства. Эти драйверы должны поддерживать операции управления питанием и PnP и обычно регистрируют несколько функций обратного вызова событий при создании объектов устройства.

Как правило, функция обратного вызова события EvtDriverDeviceAdd драйвера функции вызывает WdfDeviceInitSetPnpPowerEventCallbacks для регистрации следующих функций обратного вызова:

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

  • EvtDeviceD0Entry, который выполняет такие операции, как загрузка встроенного ПО, которые необходимы при каждом переходе устройства драйвера в рабочее состояние (D0).

  • EvtDeviceD0Exit, который выполняет операции, необходимые каждый раз, когда устройство драйвера выходит из рабочего (D0) состояния и переходит в состояние с низким энергопотреблением.

  • EvtDeviceReleaseHardware, которая освобождает все системные ресурсы, выделенные EvtDevicePrepareHardware .

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

Драйверы функций могут вызывать WdfDeviceSetPnpCapabilities и WdfDeviceSetPowerCapabilities , чтобы сообщить о возможностях PnP устройства и управления питанием в операционной системе.

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

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

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