Arquitetura hid

A arquitetura da pilha de driver HID no Windows é criada no driver de classe chamado hidclass.sys. Os clientes e os minidrivers de transporte acessam o driver de classe no modo de usuário ou no modo kernel.

O driver de classe HID

O driver de classe HID fornecido pelo sistema é o driver de função WDM e o driver de barramento para a classe de instalação do dispositivo HID (HIDClass). O componente executável do driver de classe HID é hidclass.sys. O driver classe HID é a cola entre clientes HID e vários transportes. Isso permite que um cliente HID seja escrito de maneira independente dos transportes. Esse nível de abstração permite que os clientes continuem a trabalhar (com pouca ou nenhuma modificação) quando um novo padrão ou um transporte de terceiros é introduzido.

Veja a seguir uma representação arquitetônica.

simplified hid driver stack, showing hid clients, the hid class driver and the hid transport components.

O diagrama anterior inclui o seguinte:

  • Clientes HID – identifica os clientes do Windows e de terceiros e suas interfaces.
  • Driver de classe HID – o hidclass.sys executável.
  • Minidriver de Transporte HID – identifica os transportes do Windows e de terceiros e suas interfaces.

Aqui está o diagrama de pilha de dispositivo de um cliente hid genérico e transporte.

Pilha de dispositivo HID para um cliente HID genérico e transporte.

Aqui está outro diagrama de pilha de dispositivos mostrando as coleções de teclado HID e mouse por USB.

Pilha de dispositivo HID para um teclado e mouse por USB.

Clientes HID

Os clientes HID são drivers, serviços ou aplicativos que se comunicam com HIDClass.sys e geralmente representam um tipo específico de dispositivo (por exemplo, sensor, teclado, mouse etc.). Eles identificam o dispositivo por meio de uma ID de hardware ou uma coleção HID específica e se comunicam com a Coleção HID por meio das diretrizes a seguir.

Drivers e aplicativos no modo de usuário e drivers no modo kernel fazem o seguinte para operar coleções HID:

  • Os drivers e aplicativos do modo de usuário usam rotinas de suporte hidclass (HidD_Xxx) para obter informações sobre uma coleção HID.
  • Drivers no modo kernel, drivers de modo de usuário e aplicativos usam rotinas de suporte de análise hid (HidP_Xxx) e os drivers no modo kernel usam IOCTLs do driver de classe HID para lidar com relatórios HID.

A tabela a seguir é uma simplificação das informações listadas acima.

Mode Drivers Aplicativos
Modo de usuário HidD_Xxx HidP_Xxx
Modo kernel HidD_Xxx OU IOCTL_HID_xxx N/D

Para obter mais informações, consulte Abrindo coleções HID.

Clientes HID com suporte no Windows

O Windows dá suporte às seguintes coleções de nível superior:

Página uso Uso Windows 7 Windows 8 Windows 10 Observações Modo de acesso
0x0001 0x0001 – 0x0002 Sim Sim Sim Driver de classe do mouse e driver mapeador Exclusivo
0x0001 0x0004 - 0x0005 Sim Sim Sim Controladores de jogos Compartilhado
0x0001 0x0006 - 0x0007 Sim Sim Sim Driver de classe teclado/teclado e driver mapeador Exclusivo
0x0001 0x000C Não Sim Sim Opção modo de voo Compartilhado
0x0001 0x0080 Sim Sim Sim Controles do sistema (Energia) Compartilhado
0x000C 0x0001 Sim Sim Sim (para Windows 10 e Windows 10 Mobile) Controles de consumidor Compartilhado (para Windows 10 e Windows 10 Mobile)
0x000D 0x0001 Sim Sim Sim Dispositivo de caneta externa Exclusivo
0x000D 0x0002 Sim Sim Sim Dispositivo de Caneta Integrada Exclusivo
0x000D 0x0004 Sim Sim Sim Touchscreen Exclusivo
0x000D 0x0005 Não Sim Sim PtP (Precision Touchpad) Exclusivo
0x0020 *Vários Não Sim Sim Sensores Compartilhado
0x0084 0x0004 Sim Sim Sim Hid UPS Bateria Compartilhado
0x008C 0x0002 Não Sim (Windows 8.1 e posterior) Sim Scanner de código de barras (hidscanner.dll) Compartilhado

Na tabela anterior, o modo de acesso para clientes HID de entrada é exclusivo para impedir que outros clientes HID interceptem ou recebam o estado de entrada global quando eles não forem o destinatário de destino dessa entrada. Por motivos de segurança, o RIM (Gerenciador de Entrada Bruto) abre todos esses dispositivos exclusivamente.

Se um dispositivo for aberto no modo exclusivo pela RIM, o usuário ainda poderá abrir uma interface do dispositivo HID sem solicitar permissões de leitura e gravação e obter informações de dispositivo HID por meio de rotinas de suporte do HIDClass (HidD_GetXxx).

O modo de compartilhamento permite que vários aplicativos acessem um dispositivo. Por exemplo, vários aplicativos podem acessar um scanner de código de barras para perguntar sobre os recursos do dispositivo e recuperar estatísticas. No entanto, a recuperação de dados decodificados de um scanner de código de barras é feita no modo exclusivo . Os usos são definidos pelas Tabelas de Uso USB-IF.

*Múltiplo: os usos de sensores de 0x00 – 0xFF são segmentados para fins diferentes. Por exemplo, 0x10 indica um sensor biométrico; 0x40 indica um sensor de luz. Essas alocações não são contíguas. Para obter a lista de usos do sensor, consulte Definições de classe de dispositivo USB-IF para HID. Para obter informações sobre os usos de sensores com suporte no Windows, usos de sensores hid.

O driver de transporte HID

O driver de classe HID foi projetado para usar minidrivers HID para acessar um dispositivo de entrada de hardware. Um minidriver HID abstrai a operação específica do dispositivo dos dispositivos de entrada aos quais ele dá suporte. O minidriver HID associa sua operação ao driver de classe HID registrando-se com o driver de classe HID. O driver de classe HID se comunica com um minidriver HID chamando as rotinas de suporte do minidriver. O minidriver HID, por sua vez, envia comunicações para baixo da pilha do driver para um motorista de barramento ou porta subjacente.

Transportes HID com suporte no Windows

Consulte esta página para obter uma lista de transportes HID com suporte.

O teste HID genérico USB no HLK (Windows Hardware Lab Kit) abrange drivers HidUsb e HidClass. Não há nenhum teste de HLK para mini drivers HID de terceiros.