Compartilhar via


Arquitetura HID

A arquitetura da pilha de drivers HID no Windows é criada no driver de classe chamado hidclass.sys. Clientes e 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 configuração de dispositivo HID (HIDClass). O componente executável do driver de classe HID é hidclass.sys. O driver de classe HID é a cola entre os clientes HID e vários transportes, permitindo que um cliente HID seja escrito de forma 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.

O diagrama a seguir é uma representação da arquitetura HID.

Diagrama de uma pilha de drivers HID simplificada mostrando clientes HID, o driver de classe HID e componentes de transporte HID.

O diagrama anterior inclui:

  • Clientes HID – Identifica os clientes Windows e de terceiros e suas interfaces.
  • Driver de classe HID - O executável hidclass.sys .
  • Minidriver de transporte HID - Identifica o Windows e os transportes de terceiros e suas interfaces.

Aqui está o diagrama de pilha de dispositivos de um cliente HID genérico e transporte.

Diagrama de uma pilha de dispositivos HID para um cliente HID genérico e transporte.

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

Diagrama de uma pilha de dispositivos HID para um teclado e mouse sobre 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 e assim por diante). Eles identificam o dispositivo por meio de uma ID de hardware ou de uma Coleção HID específica e se comunicam com a Coleção HID por meio das orientações a seguir.

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

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

A tabela a seguir simplifica as informações.

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 suportados no Windows

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

Página de uso Uso Observações Modo de acesso
0x0001 0x0001 - 0x0002 Driver de classe de mouse e driver de mapeador Exclusivo
0x0001 0x0004 - 0x0005 Controladores de jogo Compartilhado
0x0001 0x0006 - 0x0007 Teclado / Teclado driver de classe e driver mapeador Exclusivo
0x0001 0x000C Interruptor do modo de voo Compartilhado
0x0001 0x0080 Controles do sistema (Alimentação) Compartilhado
0x000C 0x0001 Controlo dos consumidores Compartilhado
0x000D 0x0001 Dispositivo de caneta externo Exclusivo
0x000D 0x0002 Dispositivo de caneta integrado Exclusivo
0x000D 0x0004 Touchscreen Exclusivo
0x000D 0x0005 Touchpad de precisão (PTP) Exclusivo
0x0020 *Múltiplo Sensores Compartilhado
0x0084 0x0004 Bateria HID UPS Compartilhado
0x008C 0x0002 Leitor 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 não forem o destinatário de destino dessa entrada. Por motivos de segurança, o Raw Input Manager (RIM) abre todos esses dispositivos exclusivamente.

Se a RIM abrir um dispositivo no modo exclusivo , o usuário ainda poderá abrir uma interface de dispositivo HID sem solicitar permissões de leitura e gravação e obter informações do dispositivo HID por meio de rotinas de suporte 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 em modo exclusivo . Os usos são definidos nas Tabelas de Uso USB-IF.

*Múltiplos: Usos de sensores de 0x00 – 0xFF são segmentados para diferentes finalidades. 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, consulte 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 que ele suporta. O minidriver HID vincula sua operação ao driver de classe HID registrando-se com o driver de classe HID. O driver da classe HID se comunica com um minidriver HID chamando as rotinas de suporte do minidriver. O minidriver HID, por sua vez, envia comunicações pela pilha de drivers para um driver de barramento ou porta subjacente.

Transportes HID suportados no Windows

Para obter uma lista de transportes HID suportados, consulte a Visão geral do transporte HID.

USB Generic HID Test no Windows Hardware Lab Kit (HLK) abrange drivers HidUsb e HidClass. Não há teste HLK para minidrivers HID de terceiros.