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.
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.
Aqui está outro diagrama de pilha de dispositivos mostrando as coleções de teclado HID 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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de