HID-Architektur

Die Architektur des HID-Treiberstapels in Windows basiert auf dem Klassentreiber mit dem Namenhidclass.sys. Clients und Transport-Minidriver greifen über den Benutzer- 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. Dadurch kann ein HID-Client unabhängig von Transporten geschrieben werden. Diese Abstraktionsebene ermöglicht es Clients, weiterhin zu arbeiten (mit wenig bis ohne Änderungen), wenn ein neuer Standard oder ein Drittanbietertransport eingeführt wird.

Es folgt eine architekturbezogene Darstellung.

Vereinfachter Hid-Treiberstapel, der hid-Clients, den Hid-Klassentreiber und die Hid-Transportkomponenten anzeigt.

Das obige Diagramm enthält Folgendes:

  • HID-Clients: Identifiziert die Windows- und Drittanbieterclients und deren Schnittstellen.
  • HID-Klassentreiber: Die ausführbarehidclass.sys .
  • HID Transport Minidriver: Identifiziert die Transporte von Windows und Drittanbietern und deren Schnittstellen.

Hier ist das Gerätestapeldiagramm eines generischen HID-Clients und -Transports.

HID-Gerätestapel für einen generischen HID-Client und -Transport.

Hier sehen Sie ein weiteres Gerätestapeldiagramm mit HID-Tastatur- und Maussammlungen über USB.

HID-Gerätestapel für Tastatur und Maus ü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 über die folgende Anleitung mit der HID-Sammlung.

Benutzermodustreiber und -anwendungen sowie Kernelmodustreiber führen die folgenden Schritte aus, um HID-Sammlungen zu betreiben:

  • Benutzermodustreiber und Anwendungen verwenden HIDClass-Supportroutinen (HidD_Xxx), um Informationen zu einer HID-Sammlung abzurufen.
  • Kernelmodustreiber, Benutzermodustreiber und Anwendungen verwenden HID-Analyseunterstützungsroutinen (HidP_Xxx), und Kernelmodustreiber verwenden HID-Klassentreiber-IOCTLs, um HID-Berichte zu verarbeiten.

Die folgende Tabelle enthält eine Vereinfachung der oben aufgeführten Informationen.

Mode Treiber Anwendungen
Benutzermodus HidD_Xxx HidP_Xxx
Kernelmodus HidD_Xxx ODER IOCTL_HID_xxx

Weitere Informationen finden Sie unter Öffnen von HID-Sammlungen.

In Windows unterstützte HID-Clients

Windows unterstützt die folgenden Sammlungen der obersten Ebene:

Seite "Verwendung" Verwendung Windows 7 Windows 8 Windows 10 Notizen Zugriffsmodus
0x0001 0x0001 – 0x0002 Ja Ja Ja Mausklassentreiber und Mappertreiber Exklusiv
0x0001 0x0004 – 0x0005 Ja Ja Ja Gamecontroller Shared
0x0001 0x0006 – 0x0007 Ja Ja Ja Tastatur-/Tastaturklassentreiber und Mappertreiber Exklusiv
0x0001 0x000C Nein Ja Ja Flight Mode Switch Shared
0x0001 0x0080 Ja Ja Ja Systemsteuerelemente (Power) Shared
0x000C 0x0001 Ja Ja Ja (sowohl für Windows 10 als auch für Windows 10 Mobile) Consumersteuerelemente Freigegeben (sowohl für Windows 10 als auch für Windows 10 Mobile)
0x000D 0x0001 Ja Ja Ja Externes Stiftgerät Exklusiv
0x000D 0x0002 Ja Ja Ja Integriertes Stiftgerät Exklusiv
0x000D 0x0004 Ja Ja Ja Touchscreen Exklusiv
0x000D 0x0005 Nein Ja Ja Präzisionstouchpad (PTP) Exklusiv
0x0020 *Mehrere Nein Ja Ja Sensoren Shared
0x0084 0x0004 Ja Ja Ja HID USV Akku Shared
0x008C 0x0002 Nein Ja (Windows 8.1 und höher) Ja Barcodescanner (hidscanner.dll) Shared

In der obigen 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 der Raw Input Manager (RIM) ausschließlich solche Geräte.

Wenn ein Gerät von RIM im exklusiven Modus geöffnet wird, kann der Benutzer weiterhin eine HID-Geräteschnittstelle öffnen, ohne Lese- und Schreibberechtigungen anzufordern und HID-Geräteinformationen über HIDClass-Supportroutinen (HidD_GetXxx) abzurufen.

Im Freigabemodus können mehrere Anwendungen auf ein Gerät zugreifen. Beispielsweise können mehrere Anwendungen auf einen Barcodescanner zugreifen, um Gerätefunktionen zu ermitteln und Statistiken abzurufen. Das Abrufen decodierter Daten von einem Barcodescanner erfolgt jedoch im exklusiven Modus. Verwendungen werden durch die USB-IF-Nutzungstabellen definiert.

*Mehrfach: Sensornutzungen aus 0x00 – 0xFF werden für verschiedene Zwecke segmentiert. Beispielsweise gibt 0x10 einen biometrischen Sensor an; 0x40 gibt einen Lichtsensor an. Diese Zuordnungen sind nicht zusammenhängend. Eine Liste der Sensornutzungen finden Sie unter USB-IF-Geräteklassendefinitionen für HID. Informationen zu Sensornutzungen, die in Windows unterstützt werden, erhalten Sie unter VERWENDUNG von HID-Sensoren.

Der HID-Transporttreiber

Der HID-Klassentreiber ist für die Verwendung von HID-Minitreibern für den Zugriff auf ein Hardwareeingabegerät konzipiert. Ein HID-Minidriver abstrahiert den gerätespezifischen Betrieb der eingabegeräte, die er unterstützt. Der HID-Minitreiber bindet seinen Vorgang an den HID-Klassentreiber, indem er sich beim HID-Klassentreiber registriert. Der HID-Klassentreiber kommuniziert mit einem HID-Minitreiber, indem er die Supportroutinen des Minitreibers aufruft. Der HID-Minitreiber wiederum sendet die Kommunikation im Treiberstapel an einen zugrunde liegenden Bus- oder Porttreiber.

In Windows unterstützte HID-Transporte

Eine Liste der unterstützten HID-Transporte finden Sie auf dieser Seite .

Der generische USB-HID-Test im Windows Hardware Lab Kit (HLK) deckt HidUsb- und HidClass-Treiber ab. Es gibt keinen HLK-Test für HID-Minitreiber von Drittanbietern.