Compartilhar via


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. Recomendamos começar com o exemplo de minidriver vhidmini2. Você pode compilar esse driver de exemplo usando KMDF ou UMDF 2.x.

O que fornecer

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

  2. Baixe e examine o exemplo de 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 passarem do driver de classe para o seu driver.

  5. Forneça uma função de retorno de chamada EvtIoDeviceControl que se ramifica a manipuladores de método específicos do IOCTL. Examine os IOCTLs descritos em IOCTLs do Minidriver HID do WDF e verifique se o driver manipula os relevantes para seu dispositivo.

  6. Para UMDF, se seu driver for enumerado pelo ACPI, habilite a suspensão seletiva opcionalmente. Na chave de hardware do dispositivo, adicione uma subchave EnableDefaultIdleNotificationHandler e defina-a como 1.

  7. Para o UMDF, defina as seguintes diretivas INF na seção específica DDInstall do WDF em seu 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 o 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 HID da UMDF para Windows 7, baixe o WDK (Windows Driver Kit) 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.

Architecture

O driver de classe HID (HidClass.sys) e a estrutura fornecem rotinas de despacho de WDM conflitantes para lidar com algumas solicitações de E/S, como solicitações de Plug and Play e gerenciamento de energia, 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 registrarem como o minidriver HID real. Embora esses drivers atuem como o driver de funções 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 secundário que fica sob o driver de passagem.

Arquitetura umdf:

Diagrama mostrando a localização do hidumdf.sys na pilha de drivers.

Arquitetura KMDF:

Diagrama mostrando a posição do mshidkmdf.sys no stack de drivers.