Verwenden von WDF zum Entwickeln eines Treibers

Dieses Thema bietet eine allgemeine Übersicht über die Frameworkobjekte, die Sie zum Entwickeln eines kmDF-Treibers (Kernel-Mode Driver Framework) verwenden. Sofern nicht angegeben, verwenden Sie dieselben Objekte, um einen User-Mode Driver Framework -Treiber (UMDF) ab UMDF Version 2 zu entwickeln.

WDF-Treiber (Windows Driver Frameworks) bestehen aus einer DriverEntry-Routine und einer Reihe von Ereignisrückruffunktionen, die von den Windows Driver Framework-Objekten definiert werden, die frameworkbasierte Treiber verwenden. Die Rückruffunktionen rufen Objektmethoden auf, die vom Framework exportiert werden. Das Windows Driver Kit (WDK) enthält WDF-Beispieltreiber, die veranschaulichen, wie Ereignisrückruffunktionen eines Treibers implementiert werden. Sie können diese Beispiele aus dem Windows Dev Center – Hardware herunterladen. Informationen zu den verfügbaren Beispielen finden Sie unter Beispiel-KMDF-Treiber und Beispiel-UMDF-Treiber.

Wenn Sie einen WDF-Treiber erstellen, gehen Sie in der Regel wie folgt vor:

  • Verwenden Sie ein Frameworktreiberobjekt , um Ihren Treiber darzustellen.

    Die DriverEntry-Routine des Treibers muss WdfDriverCreate aufrufen, um ein Frameworktreiberobjekt zu erstellen, das den Treiber darstellt. Die WdfDriverCreate-Methode registriert auch die EvtDriverDeviceAdd-Rückruffunktion des Treibers, die das Framework jedes Mal aufruft, wenn der PnP-Manager (Plug & Play) das Vorhandensein eines vom Treiber unterstützten Geräts meldet.

  • Verwenden Sie Frameworkgeräteobjekte , um die PnP- und Energieverwaltung in Ihrem Treiber zu unterstützen.

    Alle Treiber müssen WdfDeviceCreate aufrufen, um ein Frameworkgeräteobjekt für jedes Gerät zu erstellen, das ein Treiber unterstützt. Ein Gerät kann ein Hardwareteil sein, das an den Computer angeschlossen ist, oder es kann sich um ein reines Softwaregerät handeln. Framework-Geräteobjekte unterstützen PnP- und Energieverwaltungsvorgänge, und Treiber können Ereignisrückruffunktionen registrieren, die den Treiber benachrichtigen, wenn ein Gerät in den Betriebszustand wechselt oder diesen verlässt.

    Weitere Informationen zu Frameworkgeräteobjekten finden Sie unter Unterstützung der PnP- und Energieverwaltung in Ihrem Treiber.

  • Verwenden Sie Frameworkwarteschlangenobjekte und Frameworkanforderungsobjekte , um E/A-Vorgänge in Ihrem Treiber zu unterstützen.

    Alle Treiber, die Lese-, Schreib- oder Geräte-E/A-Steuerelementanforderungen von Anwendungen oder anderen Treibern empfangen, müssen WdfIoQueueCreate aufrufen, um Frameworkwarteschlangenobjekte zu erstellen, die E/A-Warteschlangen darstellen. In der Regel registrieren Treiber einen oder mehrere Anforderungshandler für jede E/A-Warteschlange. Wenn der E/A-Manager eine E/A-Anforderung an den Treiber sendet, erstellt das Framework ein Frameworkanforderungsobjekt für die Anforderung, platziert das Anforderungsobjekt in einer E/A-Warteschlange und ruft einen der Anforderungshandler des Treibers auf, um den Treiber darüber zu informieren, dass eine Anforderung verfügbar ist. Der Treiber ruft die E/A-Anforderung ab und kann die Anforderung erneut ausfüllen, abbrechen oder weiterleiten.

    Weitere Informationen zur Verwendung der Warteschlangen- und Anforderungsobjekte des Frameworks finden Sie unter Framework-Warteschlangenobjekte und Frameworkanforderungsobjekte.

  • Verwenden Sie Framework-Interruptobjekte , um Geräteunterbrechungen zu behandeln.

    Treiber, die Geräteunterbrechungen verarbeiten, müssen WdfInterruptCreate aufrufen, um ein Framework-Interruptobjekt für jeden Interrupt zu erstellen und Rückruffunktionen zu registrieren. Diese Rückruffunktionen aktivieren und deaktivieren den Interrupt und dienen als Interruptdienstroutine (ISR) und verzögerter Prozeduraufruf (DPC) für den Interrupt.

    Weitere Informationen zu Framework-Interruptobjekten finden Sie unter Behandeln von Hardwareunterbrechungen.

  • KMDF-Treiber können die DMA-Aktivierungsobjekte und DMA-Transaktionsobjekte des Frameworks verwenden, um DMA-Vorgänge (Direct Memory Access, DMA) eines Geräts zu verarbeiten.

    Wenn das Gerät Ihres KMDF-Treibers DMA-Vorgänge unterstützt, sollte der Treiber WdfDmaEnablerCreate aufrufen, um ein DMA-Enabler-Objekt zu erstellen, und WdfDmaTransactionCreate , um ein oder mehrere DMA-Transaktionsobjekte zu erstellen. Das DMA-Transaktionsobjekt definiert eine EvtProgramDma-Rückruffunktion , die Gerätehardware zum Ausführen eines DMA-Vorgangs programmiert.

    Weitere Informationen zur Unterstützung von DMA-Vorgängen finden Sie unter Behandeln von DMA-Vorgängen in Framework-basierten Treibern.

  • Verwenden Sie die E/A-Zielobjekte des Frameworks, um E/A-Anforderungen an andere Treiber zu senden.

    Um E/A-Anforderungen an andere Treiber (in der Regel den nächst niedrigeren Treiber im Treiberstapel) zu übergeben, sendet Ihr Treiber die Anforderung an ein E/A-Zielobjekt.

    Weitere Informationen zu E/A-Zielobjekten finden Sie unter Verwenden von E/A-Zielen.

  • Ein KMDF-Treiber kann die WMI-Anbieterobjekte und WMI-Instanzobjekte des Frameworks verwenden, um WMI-Funktionen (Windows Management Instrumentation) zu unterstützen.

    Die meisten KMDF-Treiber sollten WMI unterstützen und WdfWmiInstanceCreate aufrufen, um Rückruffunktionen zu registrieren, die WMI-Daten senden oder empfangen.

    Weitere Informationen zu WMI finden Sie unter Unterstützen von WMI in Framework-basierten Treibern.

  • Verwenden Sie die Synchronisierungsfunktionen des Frameworks.

    Alle Treiber müssen probleme mit der Multiprozessorsynchronisierung kennen und sollten Synchronisierungstechniken verwenden, die das Framework bereitstellt.

  • Verwenden Sie zusätzliche Objekte und Features, die das Framework bereitstellt.

    Das Framework stellt zusätzliche Objekte bereit, die Ihr Treiber verwenden kann. Weitere Informationen zu diesen Objekten finden Sie unter WDF-Unterstützungsobjekte.