Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается, как создать минидрайвер устройства ввода (HID) с помощью Windows Driver Frameworks (WDF).
Минидрайвер HID можно разработать с помощью KMDF или UMDF. Рекомендуется начать с примера мини-driver vhidmini2. Этот пример драйвера можно скомпилировать с помощью KMDF или UMDF 2.x.
Что предоставить
Вы напишете более низкий драйвер фильтра в MsHidUmdf.sys (для UMDF) или MsHidKmdf.sys (для KMDF), оба из которых включены в состав операционной системы.
Скачайте и просмотрите пример vhidmini2.
Используйте WdfFdoInitSetFilter из функции обратного вызова EvtDriverDeviceAdd драйвера.
Создайте очереди ввода-вывода для получения запросов ввода-вывода, которыеMsHidUmdf.sys или MsHidKmdf.sys передаются из драйвера класса в ваш драйвер.
Предоставьте функцию обратного вызова EvtIoDeviceControl , которая ветвляется к обработчикам методов, зависящим от IOCTL. Просмотрите IOCTLs, описанные в WDF HID Minidriver IOCTLs, и убедитесь, что ваш драйвер обрабатывает соответствующие из них для вашего устройства.
Для UMDF, если ваш драйвер перечисляется через ACPI, по желанию включите режим выборочного приостановления. В аппаратном ключе устройства добавьте вложенный ключ EnableDefaultIdleNotificationHandler и задайте для него значение 1.
Для 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