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.
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.
Aqui está outro diagrama de pilha de dispositivos mostrando coleções de teclado e mouse HID 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 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.