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.

Diagramm eines vereinfachten HID-Treiberstapels, der HID-Clients, des HID-Klassentreibers und der HID-Transportkomponenten.

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.

Diagramm eines HID-Gerätestapels für einen generischen HID-Client und -Transport.

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

Diagramm eines HID-Gerätestapels für eine 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 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.