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


Написание простого драйвера WDF

В этом разделе описаны минимальные функциональные возможности, необходимые для записи драйвера Kernel-Mode Driver Framework (KMDF). Для записи драйвера User-Mode Driver Framework (UMDF) требуется та же минимальная функциональность, начиная с версии 2 UMDF.

При создании нового драйвера KMDF или UMDF необходимо выбрать имя драйвера с 32 символами или меньше. Это ограничение длины определяется в wdfglobals.h. Если имя драйвера превышает максимальную длину, драйвер не будет загружаться.

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

  • Подпрограмма DriverEntry , которая вызывается при загрузке драйвера и вызывает WdfDriverCreate.

  • Функция обратного вызова событий EvtDriverDeviceAdd , которая вызывается платформой, когда диспетчер Plug and Play (PnP) сообщает об обнаружении устройства с идентификатором оборудования (ID), который соответствует идентификатору оборудования, который поддерживает драйвер.

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

    Функция обратного вызова EvtDriverDeviceAdd вызывает WdfDeviceCreate для создания объекта устройства фреймворка для обнаруженного устройства.

  • Обработчик запросов, например функция обратного вызова EvtIoDefault , который платформа вызывает, когда диспетчер ввода-вывода отправляет драйверу запрос ввода-вывода.

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

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

Дополнительные сведения о написании драйвера на основе платформы см. в разделе "Использование платформы для разработки драйвера".