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


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

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

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

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

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