Создание мини-накопителей WDF HID
В этом разделе описывается, как создать мини-диск устройства HID с помощью Платформы драйверов Windows (WDF).
Мини-накопитель HID можно написать с помощью KMDF или UMDF. Мы рекомендуем начать с примера мини-драйвера vhidmini2. Этот пример драйвера можно скомпилировать с помощью KMDF или UMDF 2.x.
Что нужно предоставить
Вы напишете драйвер нижнего фильтра вMsHidUmdf.sys (для UMDF) или MsHidKmdf.sys (для KMDF), оба из которых включены в состав операционной системы.
Скачайте и просмотрите пример vhidmini2.
Вызовите WdfFdoInitSetFilter из функции обратного вызова EvtDriverDeviceAdd драйвера.
Создавайте очереди ввода-вывода для получения запросов ввода-вывода, которые MsHidUmdf.sys или MsHidKmdf.sys передавать из драйвера класса в драйвер.
Предоставьте функцию обратного вызова EvtIoDeviceControl , которая ветвляется в обработчики методов, зависящих от IOCTL. Просмотрите ioCTL, описанные в разделе WDF HID Minidriver IOCTLs , и убедитесь, что драйвер обрабатывает соответствующие для вашего устройства.
Для UMDF, если драйвер перечисляется с помощью ACPI, при необходимости включите выборочную приостановку. В аппаратном ключе устройства добавьте подраздел EnableDefaultIdleNotificationHandler и задайте для него значение 1.
Для UMDF задайте следующие директивы INF в разделе DDInstall inf-файла, относямся к WDF:
- UmdfKernelModeClientPolicy to AllowKernelModeClients , чтобы драйвер сквозной передачи в режиме ядра можно было загрузить в стек.
- UmdfMethodNeitherAction to Copy , чтобы разрешить UMDF обрабатывать ioCTLs METHOD_NEITHER типа.
- UmdfFileObjectPolicy — AllowNullAndUnknownFileObjects
- UmdfFsContextUsePolicy — CanUseFsContext2
Пример:
[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