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

  1. Você escreverá um driver de filtro inferior emMsHidUmdf.sys (para UMDF) ou MsHidKmdf.sys (para KMDF), ambos incluídos como parte do sistema operacional.

  2. Baixe e examine o exemplo vhidmini2.

  3. Chame WdfFdoInitSetFilter da função de retorno de chamada EvtDriverDeviceAdd do driver.

  4. 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.

  5. 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.

  6. 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.

  7. 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

Diagrama mostrando o local do hidumdf.sys na pilha de driver.

Diagrama mostrando o local do mshidkmdf.sys na pilha de driver.