HID-Schaltflächentreiber
Verwenden Sie den von Microsoft bereitgestellten Schaltflächentreiber für GPIO-Schaltflächen; implementieren Sie andernfalls Ihren Treiber, der HID-Daten in das Betriebssystem eingibt.
Schaltflächen (Power, Windows, Lautstärke und Drehungssperre) werden in der Regel für Aufgaben verwendet, die auftreten, während die physische Tastatur für den Benutzer nicht verfügbar ist, auf Formfaktoren wie Cabrios oder Slates. Schaltflächen deklarieren sich selbst als HID-Geräte, indem Sie HID-Schaltflächenberichtsdeskriptoren bereitstellen. Auf diese Weise kann das System den Zweck und die Ereignisse dieser Schaltflächen auf standardisierte Weise interpretieren. Wenn sich ein Schaltflächenstatus ändert, wird dieses Ereignis einer HID-Verwendung zugeordnet. Ein HID-Transport-Minidriver meldet diese Ereignisse an Treiber der oberen Ebene, die dann Details an HID-Clients im Benutzermodus oder Kernelmodus senden.
Bei physischen allgemeinen I/O-Schaltflächen (GPIO) ist der HID-Transport-Minidriver ein von Microsoft bereitgestellter In-Box-Treiber, der die Ereignisse basierend auf den Unterbrechungen meldet, die auf den definierten GPIO-Hardwareressourcen empfangen werden.
Der In-Box-Treiber kann keine Schaltfläche verwenden, die nicht an eine Unterbrechungslinie verkabelt ist. Für solche Schaltflächen müssen Sie einen Treiber schreiben, der die Schaltfläche als HID-Schaltfläche verfügbar macht, und meldet Statusänderungen an den HID-Klassentreiber (Microsoft bereitgestellt). Ihr Treiber könnte ein HID-Quelltreiber oder ein HID-Transporttreiber sein.
Anleitung für die Unterstützung von HID-Schaltflächen
Hier sind einige allgemeine Hinweise, mit denen Sie entscheiden können, welche Implementierung Sie befolgen sollten, wenn Sie HID-Schaltflächen erstellen.
Verwenden des von Microsoft bereitgestellten In-Box-Schaltflächentreibers
Wenn Sie eine GPIO-Schaltfläche implementieren, beschreiben Sie die Schaltfläche im System ACPI, damit Windows den Boxtreiber laden kann, Hidinterrupt.sys, als Schaltflächentreiber, der Ereignisse an das Betriebssystem meldet.
- ACPI-Schaltflächengerät
- Schaltflächenverhalten
- Beispielschaltflächen ACPI für Windows 10 Core Editionen
Microsoft empfiehlt Ihnen, die transport-minidriver im Box-Transport nach Möglichkeit zu verwenden.
Schreiben eines HID-Quelltreibers im Kernelmodus
Wenn Sie eine Nicht-GPIO-Schaltfläche implementieren, z. B. einen Datenstrom im HID-Format, der von einer anderen Softwarekomponente eingefügt werden muss, können Sie einen Kernelmodustreiber schreiben. Ab Windows 10 können Sie einen HID-Quelltreiber schreiben, indem Sie Programmierschnittstellen aufrufen, die mit Virtual HID Framework (VHF) kommunizieren und HID-Berichte auf und vom HID-Klassentreiber abrufen und festlegen.
- Schreiben eines HID-Quelltreibers, der mit Virtual HID Framework (VHF) interagiert
- Virtual HID Framework-Referenz
Alternativ können Sie einen HID-Transport-Minidriver im Kernelmodus schreiben, der von früheren Versionen von Windows unterstützt wird. Wir empfehlen diesen Ansatz jedoch nicht, da schlecht geschriebene KMDF HID-Transport-Minidriver das System abstürzen können.
Schreiben eines UMDF HID Minidriver
Wenn Sie eine Nicht-GPIO-Schaltfläche implementieren, können Sie anstelle des vorherigen Modells zum Schreiben eines HID-Quelltreibers einen HID-Transport-Minidriver im Benutzermodus schreiben. Diese Treiber sind einfacher zu entwickeln als Kernelmodustreiber und Fehler in diesem Treiber beheben das gesamte System nicht.
Universelle Windows-Treiber für HID-Schaltflächen
Ab Windows 10 sind die HID-Treiberprogrammierschnittstellen Teil von OneCoreUAP-basierten Editionen von Windows. Mithilfe dieser allgemeinen Schnittstellengruppen können Sie einen Schaltflächentreiber mithilfe von Virtual HID Framework - oder Transport-Minidriver-Schnittstellen schreiben. Diese Treiber werden sowohl unter Windows 10 für Desktopeditionen (Home, Pro, Enterprise und Education) als auch unter Windows 10 Mobile sowie in anderen Windows 10-Versionen ausgeführt.
Eine schrittweise Anleitung finden Sie unter Verwenden einer universellen INF-Datei.