HID-Architektur
Die Architektur des HID-Treiberstapels in Windows basiert auf dem Klassentreiber mit dem Namen hidclass.sys. Clients und Transport-Minidriver greifen vom Benutzermodus oder Kernelmodus auf den Klassentreiber zu.
Der HID-Klassentreiber
Der vom System bereitgestellte HID-Klassentreiber ist der WDM-Funktionstreiber und bustreiber für die HID-Geräteeinrichtungsklasse (HIDClass). Die ausführbare Komponente des HID-Klassentreibers ist hidclass.sys. Der HID-Klassentreiber ist der Klebstoff zwischen HID-Clients und verschiedenen Transporten, sodass ein HID-Client unabhängig von Transporten geschrieben werden kann. Diese Abstraktionsebene ermöglicht Es Clients, weiterhin (mit wenig bis ohne Änderungen) zu arbeiten, wenn ein neuer Standard oder ein Drittanbietertransport eingeführt wird.
Das folgende Diagramm ist eine Darstellung der HID-Architektur.
Das vorangehende Diagramm enthält:
- HID-Clients – Identifiziert die Windows- und Drittanbieterclients und deren Schnittstellen.
- HID-Klassentreiber – Die hidclass.sys ausführbare Datei.
- HID-Transport-Minidriver – Identifiziert die Windows- und Drittanbietertransporte und deren Schnittstellen.
Hier sehen Sie das Gerätestapeldiagramm eines generischen HID-Clients und -Transports.
Hier ist ein weiteres Gerätestapeldiagramm mit HID-Tastatur- und Maussammlungen über USB.
HID-Clients
Die HID-Clients sind Treiber, Dienste oder Anwendungen, die mit HIDClass.sys kommunizieren und häufig einen bestimmten Gerätetyp darstellen (z. B. Sensor, Tastatur, Maus usw.). Sie identifizieren das Gerät über eine Hardware-ID oder eine bestimmte HID-Sammlung und kommunizieren mit der HID-Sammlung über die folgende Anleitung.
Benutzermodustreiber und -anwendungen sowie Kernelmodustreiber führen Sie die folgenden Schritte aus, um HID-Sammlungen auszuführen:
- Benutzermodustreiber und -anwendungen verwenden HIDClass-Supportroutinen (HidD_Xxx), um Informationen zu einer HID-Sammlung zu erhalten.
- Kernelmodustreiber, Benutzermodustreiber und Anwendungen verwenden HID-Analyseunterstützungsroutinen (HidP_Xxx), und Kernelmodustreiber verwenden HID-Klassentreiber-IOCTLs, um HID-Berichte zu verarbeiten.
Die folgende Tabelle vereinfacht die Informationen.
Mode | Treiber | Anwendungen |
---|---|---|
Benutzermodus | HidD_Xxx | HidP_Xxx |
Kernelmodus | HidD_Xxx ODER IOCTL_HID_xxx | N/V |
Weitere Informationen finden Sie unter Öffnen von HID-Auflistungen.
HID-Clients, die in Windows unterstützt werden
Windows unterstützt die folgenden Auflistungen der obersten Ebene:
Verwendungsseite | Verbrauch | Hinweise | Zugriffsmodus |
---|---|---|---|
0x0001 | 0x0001 - 0x0002 | Mausklassentreiber und Mappertreiber | Exklusiv |
0x0001 | 0x0004 - 0x0005 | Gamecontroller | Shared |
0x0001 | 0x0006 - 0x0007 | Tastatur-/Tastaturklassentreiber und Mappertreiber | Exklusiv |
0x0001 | 0x000C | Flugmodusschalter | Shared |
0x0001 | 0x0080 | Systemsteuerelemente (Power) | Shared |
0x000C | 0x0001 | Verbrauchersteuerelemente | Shared |
0x000D | 0x0001 | Externes Stiftgerät | Exklusiv |
0x000D | 0x0002 | Integriertes Stiftgerät | Exklusiv |
0x000D | 0x0004 | Touchscreen | Exklusiv |
0x000D | 0x0005 | Präzisionstouchpad (PTP) | Exklusiv |
0x0020 | *Mehrfach | Sensoren | Shared |
0x0084 | 0x0004 | HID UPS Akku | Shared |
0x008C | 0x0002 | Strichcodescanner (hidscanner.dll) | Shared |
In der vorherigen Tabelle ist der Zugriffsmodus für HID-Eingabeclients exklusiv , um zu verhindern, dass andere HID-Clients den globalen Eingabezustand abfangen oder empfangen, wenn sie nicht der Zielempfänger dieser Eingabe sind. Aus Sicherheitsgründen öffnet Raw Input Manager (RIM) alle diese Geräte ausschließlich.
Wenn RIM ein Gerät im exklusiven Modus öffnet, kann der Benutzer weiterhin eine HID-Geräteschnittstelle öffnen, ohne Lese- und Schreibberechtigungen anzufordern und HID-Geräteinformationen über HIDClass-Supportroutinen (HidD_GetXxx) abzurufen.
Der Freigabemodus ermöglicht mehreren Anwendungen den Zugriff auf ein Gerät. Beispielsweise können mehrere Anwendungen auf einen Strichcodescanner zugreifen, um sich über Gerätefunktionen zu erkundigen und Statistiken abzurufen. Das Abrufen decodierter Daten von einem Strichcodescanner erfolgt jedoch im exklusiven Modus. Verwendungen werden in den USB-WENN-Verwendungstabellen definiert.
*Multiple: Sensornutzungen aus 0x00 – 0xFF werden zu unterschiedlichen Zwecken segmentiert. Beispielsweise gibt 0x10 einen biometrischen Sensor an; 0x40 gibt einen Lichtsensor an. Diese Zuordnungen sind nicht zusammenhängend. Eine Liste der Sensorverwendungen finden Sie unter USB-IF-Geräteklassendefinitionen für HID. Informationen zu Sensorennutzungen, die in Windows unterstützt werden, finden Sie unter HID Sensors Usages.For information about sensors usages, that are supported in Windows, see HID Sensors Usages.
Der HID-Transporttreiber
Der HID-Klassentreiber wurde für den Zugriff auf ein Hardwareeingabegerät mit HID-Minidrivern entwickelt. Ein HID-Minidriver abstrahiert den gerätespezifischen Betrieb der von ihr unterstützten Eingabegeräte. Der HID-Minidriver bindet seinen Vorgang an den HID-Klassentreiber, indem er sich beim HID-Klassentreiber registriert. Der HID-Klassentreiber kommuniziert mit einem HID-Minidriver, indem er die Supportroutinen des Minidrivers aufruft. Der HID-Minidriver sendet wiederum die Kommunikation nach unten an einen zugrunde liegenden Bus- oder Porttreiber.
HID-Transporte, die in Windows unterstützt werden
Eine Liste der unterstützten HID-Transporte finden Sie in der HID-Transportübersicht.
USB Generic HID Test im Windows Hardware Lab Kit (HLK) deckt HidUsb- und HidClass-Treiber ab. Es gibt keinen HLK-Test für HID-Minidriver von Drittanbietern.