Criando minidrivers HID do WDF
Este tópico descreve como criar um minidriver HID (Dispositivo de Interface Humana) usando o WDF (Windows Driver Frameworks).
Você pode escrever um minidriver HID usando KMDF ou UMDF. É recomendável começar com o exemplo de minidriver vhidmini2. Você pode compilar este driver de exemplo usando KMDF ou UMDF 2.x.
O que fornecer
Você escreverá um driver de filtro inferior emMsHidUmdf.sys (para UMDF) ou MsHidKmdf.sys (para KMDF), ambos incluídos como parte do sistema operacional.
Baixe e examine o exemplo vhidmini2.
Chame WdfFdoInitSetFilter da função de retorno de chamada EvtDriverDeviceAdd do driver.
Crie filas de E/S para receber solicitações de E/S que MsHidUmdf.sys ou MsHidKmdf.sys passar do driver de classe para o driver.
Forneça uma função de retorno de chamada EvtIoDeviceControl que se ramifica a manipuladores de método específicos de IOCTL. Examine as IOCTLs descritas em IOCTLs do Minidriver HID do WDF e verifique se o driver lida com as relevantes para seu dispositivo.
Para UMDF, se o driver for enumerado pelo ACPI, opcionalmente, habilite a suspensão seletiva. Na chave de hardware do dispositivo, adicione uma subchave EnableDefaultIdleNotificationHandler e defina-a como 1.
Para UMDF, defina as seguintes diretivas INF em uma seção DDInstall específica do WDF do arquivo INF:
- UmdfKernelModeClientPolicy para AllowKernelModeClients para que o driver de passagem do modo kernel possa ser carregado na pilha.
- UmdfMethodNeitherAction para Copiar para permitir que UMDF processe IOCTLs do tipo METHOD_NEITHER.
- UmdfFileObjectPolicy para AllowNullAndUnknownFileObjects
- UmdfFsContextUsePolicy para CanUseFsContext2
Por exemplo:
[hidumdf.NT.Wdf] UmdfKernelModeClientPolicy = AllowKernelModeClients UmdfMethodNeitherAction=Copy UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects UmdfFsContextUsePolicy = CanUseFsContext2
Se você estiver escrevendo um minidriver UMDF HID para Windows 7, baixe o WDK (Kit de Driver do Windows) 8.1 para obter o código-fonte para HidUmdf.sys. Em seguida, escreva um driver UMDF 1.11 e inclua HidUmdf.sys e UMDF 1.11 em seu pacote de driver.
Arquitetura
O driver de classe HID (HidClass.sys) e a estrutura fornecem rotinas conflitantes de expedição do WDM para lidar com algumas solicitações de E/S (como solicitações de gerenciamento de energia e Plug and Play) para minidrivers. Como resultado, um minidriver HID não pode vincular ao driver de classe e à estrutura. Portanto, a Microsoft fornece MsHidUmdf.sys e MsHidKmdf.sys, que são drivers WDM que residem entre o driver de classe e o minidriver.
Tanto MsHidUmdf.sys quanto MsHidKmdf.sys chamam a rotina HidRegisterMinidriver do driver de classe HID para se registrar como o minidriver HID real. Embora esses drivers atuem como o driver de função do dispositivo, eles apenas passam solicitações de E/S do driver de classe para o driver (e, portanto, às vezes são chamados de drivers de passagem). Para KMDF e UMDF, o único componente que você fornece é o minidriver HID, que é um driver de filtro inferior que fica sob o driver de passagem.
Arquitetura de UMDF: arquitetura KMDF