Architecture HID

L’architecture de la pile de pilotes HID dans Windows est basée 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 de configuration 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 collage entre les clients HID et divers transports, ce qui 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 à aucune modification) lorsqu’un nouveau standard ou un transport tiers est introduit.

Le diagramme suivant est une représentation de l’architecture HID.

Diagramme d’une pile de pilotes HID simplifiée montrant les clients HID, 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 .
  • Minidriver de transport HID : identifie les transports Windows et tiers et leurs interfaces.

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

Diagramme d’une pile d’appareils HID pour un client HID générique et un transport.

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

Diagramme d’une pile d’appareils HID pour un clavier et une souris sur USB.

Clients HID

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

Les pilotes et les applications en mode utilisateur, ainsi que les pilotes en mode noyau, effectuent les opérations suivantes pour utiliser des collections 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 en mode utilisateur et les applications utilisent des routines de prise en charge de l’analyse HID (HidP_Xxx), et les pilotes en mode noyau utilisent des iocTLs de pilotes de classe HID pour gérer les rapports HID.

Le tableau suivant simplifie les informations.

Mode Pilotes Applications
Mode utilisateur HidD_Xxx HidP_Xxx
Mode noyau HidD_Xxx OR IOCTL_HID_xxx S/O

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 Utilisation Utilisation Notes Mode d’accès
0x0001 0x0001 - 0x0002 Pilote de classe souris et pilote de mappeur Exclusif
0x0001 0x0004 - 0x0005 Contrôleurs de jeu Partagés
0x0001 0x0006 - 0x0007 Pilote de classe clavier / Clavier clavier et pilote de mappeur Exclusif
0x0001 0x000C Commutateur en mode version d’évaluation Partagés
0x0001 0x0080 Contrôles système (Power) Partagés
0x000C 0x0001 Contrôles consommateur Partagés
0x000D 0x0001 Périphérique de stylet externe Exclusif
0x000D 0x0002 Appareil de stylet intégré Exclusif
0x000D 0x0004 Touchscreen Exclusif
0x000D 0x0005 Pavé tactile de précision (PTP) Exclusif
0x0020 *Multiple Capteurs Partagés
0x0084 0x0004 BATTERIE HID UPS Partagés
0x008C 0x0002 Scanneur de codes-barres (hidscanner.dll) Partagés

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é, le Gestionnaire d’entrée brut (RIM) ouvre tous ces appareils exclusivement.

Si RIM ouvre un appareil en mode exclusif , l’utilisateur peut toujours ouvrir une interface d’appareil HID sans demander d’autorisations de lecture et d’écriture et obtenir des informations d’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 vous 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 est effectuée en mode exclusif . Les utilisations sont définies dans les tables d’utilisation USB-IF.

*Multiple : les utilisations des capteurs de 0x00 – 0xFF sont segmentées à des fins différentes. Par exemple, 0x10 indique un capteur biométrique ; 0x40 indique un capteur lumineux. Ces allocations ne sont pas contiguës. Pour obtenir la liste des utilisations du capteur, consultez les 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.

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ériel. Un minidriver HID extrait l’opération spécifique à l’appareil des appareils 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 envoie à son tour les communications vers la pile des pilotes vers un bus ou un pilote de port sous-jacent.

Transports HID pris en charge dans Windows

Pour obtenir la liste des transports HID pris en charge, consultez la vue d’ensemble du transport HID.

Le test HID générique USB dans le Kit de laboratoire matériel Windows (HLK) couvre les pilotes HidUsb et HidClass. Il n’existe aucun test HLK pour les minidrivers HID tiers.