Compartilhar via


Arquitetura HID

A arquitetura da pilha de driver HID no Windows baseia-se 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 configuração de dispositivo HID (HIDClass). O componente executável do driver de classe HID é hidclass.sys. O driver de classe HID é a ponte entre clientes HID e vários meios de transporte, permitindo que um cliente HID seja escrito de maneira independente dos meios de transporte. 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 driver HID simplificada mostrando clientes HID, o driver da classe HID e componentes de transporte HID.

O diagrama anterior inclui:

  • Clientes HID – identifica os clientes Windows e os 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, além de suas interfaces.

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

Diagrama de uma estrutura de dispositivo HID para um cliente HID genérico e interface de comunicação.

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

Diagrama de uma pilha de dispositivos HID para teclado e mouse via 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 uma coleção HID específica e se comunicam com a Coleção HID por meio das diretrizes a seguir.

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

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

A tabela a seguir simplifica as informações.

Modo Motoristas Aplicativos
Modo de Usuário HidD_Xxx HidP_Xxx
Modo Kernel HidD_Xxx OU IOCTL_HID_xxx Não aplicável

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

Clientes HID com suporte no Windows

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

Página de uso Uso Anotações Modo de acesso
0x0001 0x0001 - 0x0002 Driver de classe do mouse e driver de mapeador Exclusivo
0x0001 0x0004 - 0x0005 Controladores de jogo Compartilhado
0x0001 0x0006 - 0x0007 Driver de classe de teclado/teclado numérico e driver de mapeamento Exclusivo
0x0001 0x000C Opção de modo de voo Compartilhado
0x0001 0x0080 Controles de sistema (Energia) Compartilhado
0x000C 0x0001 Controles do consumidor Compartilhado
0x000D 0x0001 Dispositivo de caneta externa Exclusivo
0x000D 0x0002 Dispositivo de caneta integrada Exclusivo
0x000D 0x0004 Tela sensível ao toque Exclusivo
0x000D 0x0005 PTP (touchpad de precisão) Exclusivo
0x0020 *Múltiplo Sensores Compartilhado
0x0084 0x0004 Bateria HID UPS Compartilhado
0x008C 0x0002 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 estado de entrada global quando eles não são o destinatário de destino dessa entrada. Por motivos de segurança, o RIM (Raw Input Manager) abre todos esses dispositivos exclusivamente.

Se o 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 de 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 no modo exclusivo . Os usos são definidos nas tabelas de usoUSB-IF.

*Múltiplo: os 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 USB-IF definições de classe de dispositivo 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 aos quais ele dá suporte. O minidriver HID vincula sua operação ao driver de classe HID ao se registrar com este. 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 pela pilha de motoristas para um motorista de ônibus ou porta subjacente.

Protocolos de Transporte HID com suporte no Windows

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

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