HID Architecture

L’architecture de la pile de pilotes HID dans Windows repose sur le pilote de classe nommé hidclass.sys. Les clients et les minidrivers de transport accèdent au pilote de classe à partir du mode utilisateur ou du mode noyau.

Pilote de classe HID

Le pilote de classe HID fourni par le système est le pilote de fonction WDM et le pilote de bus pour la classe d’installation de périphérique HID (HIDClass). Le composant exécutable du pilote de classe HID est hidclass.sys. Le pilote de classe HID est le lien entre les clients HID et divers transports. Cela permet à un client HID d’être écrit de manière indépendante des transports. Ce niveau d’abstraction permet aux clients de continuer à travailler (avec peu ou pas de modifications) lorsqu’une nouvelle norme ou un transport tiers est introduit.

Voici une représentation architecturale.

pile de pilotes hid simplifiée, montrant les clients masqués, le pilote de classe hid et les composants de transport hid.

Le diagramme précédent comprend les éléments suivants :

  • Clients HID : identifie les clients Windows et tiers et leurs interfaces.
  • Pilote de classe HID : exécutable hidclass.sys .
  • Hid Transport Minidriver : identifie les transports Windows et tiers et leurs interfaces.

Voici le diagramme de pile d’appareils d’un client hid générique et d’un transport.

Pile d’appareils HID pour un client et un transport HID génériques.

Voici un autre diagramme de pile d’appareils montrant les regroupements de claviers et de souris HID sur USB.

Pile de périphériques HID pour un clavier et une souris sur USB.

HID Clients

Les clients HID sont des pilotes, des services ou des applications qui communiquent avec HIDClass.sys et représentent souvent un type d’appareil spécifique (par exemple, capteur, clavier, souris, etc.). Ils identifient l’appareil via un ID matériel ou un regroupement HID spécifique et communiquent avec la collection HID via les instructions suivantes.

Les pilotes et applications en mode utilisateur, ainsi que les pilotes en mode noyau, procédez comme suit pour utiliser les regroupements HID :

  • Les pilotes et applications en mode utilisateur utilisent des routines de prise en charge HIDClass (HidD_Xxx) pour obtenir des informations sur une collection HID.
  • Les pilotes en mode noyau, les pilotes et les applications en mode utilisateur utilisent des routines de prise en charge de l’analyse HID (HidP_Xxx), et les pilotes en mode noyau utilisent des IOCTL de pilotes de classe HID pour gérer les rapports HID.

Le tableau suivant simplifie les informations répertoriées ci-dessus.

Mode Pilotes Applications
Mode utilisateur HidD_Xxx HidP_Xxx
Mode noyau HidD_Xxx OU IOCTL_HID_xxx N/A

Pour plus d’informations, consultez Ouverture de collections HID.

Clients HID pris en charge dans Windows

Windows prend en charge les collections de niveau supérieur suivantes :

Page d’utilisation Utilisation Windows 7 Windows 8 Windows 10 Notes Mode d’accès
0x0001 0x0001 - 0x0002 Oui Oui Oui Pilote de classe de souris et pilote de mappeur Exclusif
0x0001 0x0004 - 0x0005 Oui Oui Oui Contrôleurs de jeu Partagé
0x0001 0x0006 - 0x0007 Oui Oui Oui Pilote de classe clavier/clavier et pilote de mappeur Exclusif
0x0001 0x000C Non Oui Oui Commutateur de mode de vol Partagé
0x0001 0x0080 Oui Oui Oui Contrôles système (alimentation) Partagé
0x000C 0x0001 Oui Oui Oui (pour les Windows 10 et les Windows 10 Mobile) Contrôles consommateur Partagé (pour les Windows 10 et les Windows 10 Mobile)
0x000D 0x0001 Oui Oui Oui Périphérique de stylet externe Exclusif
0x000D 0x0002 Oui Oui Oui Périphérique de stylet intégré Exclusif
0x000D 0x0004 Oui Oui Oui Touchscreen Exclusif
0x000D 0x0005 Non Oui Oui Pavé tactile de précision (PTP) Exclusif
0x0020 *Plusieurs Non Oui Oui Capteurs Partagé
0x0084 0x0004 Oui Oui Oui Batterie HID UPS Partagé
0x008C 0x0002 Non Oui (Windows 8.1 et versions ultérieures) Yes Scanneur de codes-barres (hidscanner.dll) Partagé

Dans le tableau précédent, le mode d’accès pour les clients HID d’entrée est exclusif pour empêcher d’autres clients HID d’intercepter ou de recevoir l’état d’entrée global lorsqu’ils ne sont pas le destinataire cible de cette entrée. Pour des raisons de sécurité, Raw Input Manager (RIM) ouvre tous ces appareils exclusivement.

Si un appareil est ouvert en mode exclusif par RIM, l’utilisateur peut toujours ouvrir une interface d’appareil HID sans demander des autorisations de lecture et d’écriture et obtenir des informations sur l’appareil HID via les routines de support HIDClass (HidD_GetXxx).

Le mode de partage permet à plusieurs applications d’accéder à un appareil. Par exemple, plusieurs applications peuvent accéder à un scanneur de codes-barres pour se renseigner sur les fonctionnalités de l’appareil et récupérer des statistiques. Toutefois, la récupération des données décodées à partir d’un scanneur de codes-barres s’effectue en mode exclusif . Les utilisations sont définies par les tables d’utilisation USB-IF.

*Multiple : utilisations des capteurs à partir de 0x00 : les 0xFF sont segmentées à des fins différentes. Par exemple, 0x10 indique un capteur biométrique ; 0x40 indique un capteur de lumière. Ces allocations ne sont pas contiguës. Pour obtenir la liste des utilisations des capteurs, consultez Définitions de classe de périphérique USB-IF pour HID. Pour plus d’informations sur les utilisations des capteurs prises en charge dans Windows, consultez Utilisations des capteurs HID.

Le pilote de transport HID

Le pilote de classe HID est conçu pour utiliser des minidrivers HID pour accéder à un périphérique d’entrée matérielle. Un minidriver HID extrait l’opération spécifique à l’appareil des périphériques d’entrée qu’il prend en charge. Le minidriver HID lie son opération au pilote de classe HID en s’inscrivant auprès du pilote de classe HID. Le pilote de classe HID communique avec un minidriver HID en appelant les routines de support du minidriver. Le minidriver HID, à son tour, envoie des communications dans la pile des pilotes à un pilote de bus ou de port sous-jacent.

Transports HID pris en charge dans Windows

Consultez cette page pour obtenir la liste des transports HID pris en charge.

Le test HID générique USB dans le kit HLK (Windows Hardware Lab Kit) couvre les pilotes HidUsb et HidClass. Il n’existe aucun test HLK pour les mini-pilotes HID tiers.