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


Создание минидрайверов WDF HID

В этом разделе описывается, как создать минидрайвер устройства ввода (HID) с помощью Windows Driver Frameworks (WDF).

Минидрайвер HID можно разработать с помощью KMDF или UMDF. Рекомендуется начать с примера мини-driver vhidmini2. Этот пример драйвера можно скомпилировать с помощью KMDF или UMDF 2.x.

Что предоставить

  1. Вы напишете более низкий драйвер фильтра в MsHidUmdf.sys (для UMDF) или MsHidKmdf.sys (для KMDF), оба из которых включены в состав операционной системы.

  2. Скачайте и просмотрите пример vhidmini2.

  3. Используйте WdfFdoInitSetFilter из функции обратного вызова EvtDriverDeviceAdd драйвера.

  4. Создайте очереди ввода-вывода для получения запросов ввода-вывода, которыеMsHidUmdf.sys или MsHidKmdf.sys передаются из драйвера класса в ваш драйвер.

  5. Предоставьте функцию обратного вызова EvtIoDeviceControl , которая ветвляется к обработчикам методов, зависящим от IOCTL. Просмотрите IOCTLs, описанные в WDF HID Minidriver IOCTLs, и убедитесь, что ваш драйвер обрабатывает соответствующие из них для вашего устройства.

  6. Для UMDF, если ваш драйвер перечисляется через ACPI, по желанию включите режим выборочного приостановления. В аппаратном ключе устройства добавьте вложенный ключ EnableDefaultIdleNotificationHandler и задайте для него значение 1.

  7. Для UMDF задайте следующие директивы INF в DDInstall разделе, специфичном для WDF, вашего INF файла:

    • Измените UmdfKernelModeClientPolicy на AllowKernelModeClients, чтобы драйвер режима сквозного прохождения ядра можно было загрузить в стек.
    • UmdfMethodNeitherAction для Copy, чтобы разрешить UMDF обрабатывать IOCTLs типа METHOD_NEITHER.
    • UmdfFileObjectPolicy в AllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicy для CanUseFsContext2

    Рассмотрим пример.

    [hidumdf.NT.Wdf]
    UmdfKernelModeClientPolicy = AllowKernelModeClients
    UmdfMethodNeitherAction=Copy
    UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
    UmdfFsContextUsePolicy = CanUseFsContext2
    

Если вы пишете мини-накопитель UMDF HID для Windows 7, скачайте пакет драйверов Windows (WDK) 8.1 , чтобы получить исходный код для HidUmdf.sys. Затем напишите драйвер UMDF 1.11 и включите HidUmdf.sys и UMDF 1.11 в пакет драйвера.

Архитектура

Драйвер класса HID (HidClass.sys) и платформа предоставляют конфликтующие подпрограммы отправки WDM для обработки некоторых запросов ввода-вывода (таких как запросы на подключение и управление питанием) для минидрайверов. В результате минидрайвер HID не может одновременно связаться с драйвером класса и фреймворком. Поэтому корпорация Майкрософт предоставляет MsHidUmdf.sys и MsHidKmdf.sys — это драйверы WDM, которые располагаются между драйвером класса и минимодулем драйвера.

КакMsHidUmdf.sys, так и MsHidKmdf.sys вызывают подпрограмму HidRegisterMinidriver драйвера HID для регистрации в качестве фактического минидрайвера HID. Хотя эти драйверы действуют как функциональный драйвер устройства, они просто передают I/O-запросы от драйвера класса вашему драйверу (и поэтому иногда называются драйверами сквозной передачи). Для KMDF и UMDF единственным компонентом, который вы предоставляете, является минидрайвер HID, который выступает в качестве нижнего фильтра и находится под сквозным драйвером.

Архитектура UMDF: архитектура KMDF

Схема, показывающая расположение hidumdf.sys в стеке драйверов.

Схема, показывающая расположение mshidkmdf.sys в стеке драйверов.