Создание мини-накопителей WDF HID

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

Мини-накопитель HID можно написать с помощью KMDF или UMDF. Мы рекомендуем начать с примера мини-драйвера 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. Просмотрите ioCTL, описанные в разделе WDF HID Minidriver IOCTLs , и убедитесь, что драйвер обрабатывает соответствующие для вашего устройства.

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

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

    • UmdfKernelModeClientPolicy to AllowKernelModeClients , чтобы драйвер сквозной передачи в режиме ядра можно было загрузить в стек.
    • UmdfMethodNeitherAction to Copy , чтобы разрешить UMDF обрабатывать ioCTLs METHOD_NEITHER типа.
    • UmdfFileObjectPolicyAllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicyCanUseFsContext2

    Пример:

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

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

Архитектура

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

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

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

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

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