Поделиться через


Модель программирования DDI 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 взаимодействуют через DDI UMDF. DDI UMDF похож на DDI KMDF, за исключением того, что UMDF DDI основан на COM. Таким образом, авторы драйверов, знакомые с KMDF, будут понимать UMDF.

Для каждого типа объекта платформы UMDF определяет интерфейс, с помощью которого можно управлять экземплярами объекта . Каждый интерфейс поддерживает методы и свойства. Методы определяют действия, которые могут быть выполнены от имени объекта и свойств, и извлекают характеристики объекта. Некоторые интерфейсы реализуются платформой, а другие — драйвером. Интерфейсы, предоставляемые объектом платформы, имеют форму объекта IWDF<, а интерфейсы обратного вызова событий, предоставляемые драйвером, имеют форму действия> объекта><I<, где <объект> представляет очередь, запрос и т. д., а <действие> указывает, что делает интерфейс.> Методы интерфейсов обратного вызова начинаются с "On".

Драйвер UMDF взаимодействует с объектами платформы через их методы и свойства. Платформа взаимодействует с драйвером через уведомления о событиях, которые являются функциями обратного вызова, которые платформа может вызывать для уведомления драйвера о конкретных событиях. Чтобы зарегистрировать функции обратного вызова, драйвер может вызвать, например, следующие методы объекта платформы и передать указатель на интерфейс IUnknown , связанный со всеми интерфейсами функций обратного вызова, поддерживаемых драйвером.

В качестве примера взаимодействия между драйверами и платформами рассмотрим объект очереди ввода-вывода устройства по умолчанию. Драйвер может вызывать такие методы, как IWDFIoQueue::GetState, для получения сведений о состоянии очереди ввода-вывода или IWDFIoQueue::RetrieveNextRequest для получения запроса из очереди ввода-вывода. Драйвер также может запрашивать уведомления в очереди ввода-вывода, вызывая метод IWDFDevice::CreateIoQueue для регистрации интерфейсов обратного вызова, таких как IQueueCallbackRead и IQueueCallbackWrite. Методы этих интерфейсов впоследствии вызываются платформой, когда приложение отправляет запросы на чтение и запись.

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