Erstellen von WDF HID Minidrivern

In diesem Thema wird beschrieben, wie Sie mithilfe von Windows Driver Frameworks (WDF) einen HID-Minitreiber (Human Interface Device) erstellen.

Sie können einen HID-Minitreiber entweder mit KMDF oder UMDF schreiben. Es wird empfohlen, mit dem Beispiel "vhidmini2 minidriver" zu beginnen. Sie können diesen Beispieltreiber entweder mit KMDF oder UMDF 2.x kompilieren.

Was soll bereitgestellt werden?

  1. Sie schreiben einen niedrigeren Filtertreiber unter MsHidUmdf.sys (für UMDF) oder MsHidKmdf.sys (für KMDF), die beide als Teil des Betriebssystems enthalten sind.

  2. Laden Sie das vhidmini2-Beispiel herunter, und überprüfen Sie es.

  3. Rufen Sie WdfFdoInitSetFilter über die Rückruffunktion EvtDriverDeviceAdd des Treibers auf.

  4. Erstellen Sie E/A-Warteschlangen, um E/A-Anforderungen zu empfangen, die MsHidUmdf.sys oder MsHidKmdf.sys vom Klassentreiber an Ihren Treiber übergeben.

  5. Stellen Sie eine EvtIoDeviceControl-Rückruffunktion bereit, die mit IOCTL-spezifischen Methodenhandlern verzweigt. Überprüfen Sie die unter WDF HID Minidriver-IOCTLs beschriebenen IOCTLs , und stellen Sie sicher, dass Ihr Treiber die relevanten für Ihr Gerät verarbeitet.

  6. Wenn Ihr Treiber von ACPI aufgezählt wird, aktivieren Sie für UMDF optional das selektive Anhalten. Fügen Sie im Hardwareschlüssel des Geräts einen EnableDefaultIdleNotificationHandler-Unterschlüssel hinzu, und legen Sie ihn auf 1 fest.

  7. Legen Sie für UMDF die folgenden INF-Anweisungen in einem WDF-spezifischen DDInstall-Abschnitt Ihrer INF-Datei fest:

    • UmdfKernelModeClientPolicy in AllowKernelModeClients , damit der Kernelmodus-Passthroughtreiber in den Stapel geladen werden kann.
    • UmdfMethodNeitherAction to Copy , um UMDF die Verarbeitung von IOCTLs METHOD_NEITHER Typs zu ermöglichen.
    • UmdfFileObjectPolicy zu AllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicy zu CanUseFsContext2

    Beispiel:

    [hidumdf.NT.Wdf]
    UmdfKernelModeClientPolicy = AllowKernelModeClients
    UmdfMethodNeitherAction=Copy
    UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
    UmdfFsContextUsePolicy = CanUseFsContext2
    

Wenn Sie einen UMDF HID-Minitreiber für Windows 7 schreiben, laden Sie windows Driver Kit (WDK) 8.1 herunter, um Quellcode für HidUmdf.syszu erhalten. Schreiben Sie dann einen UMDF 1.11-Treiber, und fügen Sie HidUmdf.sys und UMDF 1.11 in Ihr Treiberpaket ein.

Aufbau

Der HID-Klassentreiber (HidClass.sys) und das Framework stellen in Konflikt stehende WDM-Dispatchroutinen bereit, um einige E/A-Anforderungen (z. B. Plug & Play- und Energieverwaltungsanforderungen) für Minitreiber zu verarbeiten. Daher kann ein HID-Minitreiber nicht sowohl mit dem Klassentreiber als auch mit dem Framework verknüpft werden. Daher stellt Microsoft MsHidUmdf.sys und MsHidKmdf.sysbereit, bei denen es sich um WDM-Treiber handelt, die sich zwischen dem Klassentreiber und dem Minitreiber befinden.

Sowohl MsHidUmdf.sys als auchMsHidKmdf.sys rufen die HidRegisterMinidriver-Routine des HID-Klassentreibers auf, um sich als tatsächlicher HID-Minitreiber zu registrieren. Obwohl diese Treiber als Funktionstreiber des Geräts fungieren, übergeben sie nur E/A-Anforderungen vom Klassentreiber an Ihren Treiber (und werden daher manchmal als Passthroughtreiber bezeichnet). Für KMDF und UMDF ist die einzige Komponente, die Sie bereitstellen, der HID-Minitreiber, bei dem es sich um einen niedrigeren Filtertreiber handelt, der sich unter dem Passthrough-Treiber befindet.

UMDF-Architektur: KMDF-Architektur

Diagramm, das den Speicherort von hidumdf.sys im Treiberstapel zeigt.

Diagramm, das den Speicherort von mshidkmdf.sys im Treiberstapel zeigt.