Freigeben über


Installieren eines UMDF-Filtertreibers

Ein Filtertreiber kann ein bestimmtes Gerät oder alle Geräte in einer Setupklasse unterstützen. Ein niedrigerer Filtertreiber fügt unterhalb des Funktionstreibers eines Geräts an, während ein oberer Filter über dem Funktionstreiber des Geräts anfügt.

In diesem Thema wird beschrieben, wie Sie einen gerätespezifischen (oberen oder unteren) Filtertreiber (User-Mode Driver Framework, UMDF) installieren und konfigurieren. Sie können UMDF nicht verwenden, um einen Klassenfiltertreiber zu schreiben. Dieses Thema gilt sowohl für UMDF-Versionen 1 als auch für 2.

Beachten Sie beim Strukturieren des Gerätestapels, dass das Framework derzeit nur einen zusammenhängenden Block von UMDF-Treibern pro Stapel unterstützt. Außerdem können Sie UMDF-Treiber Version 1 und Version 2 nicht im selben Gerätestapel installieren.

So installieren und konfigurieren Sie Ihren Treiber

  1. Ein UMDF 1-Filtertreiber sollte IWDFDeviceInitialize::SetFilter von seiner Rückruffunktion IDriverEntry::OnDeviceAdd aufrufen. Ab UMDF Version 2 ruft ihr Treiber stattdessen WdfFdoInitSetFilter auf.

  2. Zusätzlich zu allen UMDF-spezifischen Direktiven, die Ihr Treiber angeben kann, müssen Sie die UmdfService - und UmdfServiceOrder-Direktiven angeben. In diesem Thema geben wir einen oberen Filtertreiber an:

    [<mydriver>_Install.NT.Wdf]
    UmdfService=UMDFFunction,WUDFFuncDriver_Install
    UmdfService=UMDFFilter,UMDFFilter_Install
    UmdfServiceOrder=UMDFFunction,UMDFFilter
    

    Die Treiber werden dem Gerätestapel in der Reihenfolge hinzugefügt, in der sie im UmdfServiceOrder-Eintrag aufgeführt sind. Der erste Parameter gibt den niedrigsten UMDF-Treiber im Gerätestapel an. Um einen niedrigeren Filtertreiber zu installieren, kehren Sie einfach die Argumente für UmdfServiceOrder um.

    Weitere Informationen zu diesen und anderen UMDF-spezifischen INF-Direktiven finden Sie unter Angeben von WDF-Direktiven in INF-Dateien.

  3. Wenn der Gerätestapel Ihres Treibers nur UMDF-Treiber enthält, überspringen Sie diesen Schritt.

    Wenn der Gerätestapel Ihres Treibers keine UMDF-Treiber enthält, muss die INF-Datei einen AddReg-Abschnitt enthalten, der den Reflektor als oberer Filtertreiber angibt:

    [<mydriver>_Device_AddReg]
    ; Load the redirector as an upperfilter on this specific device.
    ; 0x00010008 - FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND
    HKR,,"UpperFilters",0x00010008,"WUDFRd" 
    
  4. Nachdem Der Treiber als oberer Filter geladen wurde, ist er für die Weiterleitung von E/A-Anforderungen an den nächsten Treiber im Stapel verantwortlich. Betrachten Sie zur Veranschaulichung einen einfachen Pass-Through-Treiber (UMDF Version 1), der sich über einem KMDF-Funktionstreiber befindet.

    Rufen Sie zunächst die Schnittstelle des Standard-E/A-Ziels (nächster Treiber im Stapel) ab. Formatieren und senden Sie dann die Anforderung. Das einfachste Szenario würde wie folgt aussehen:

    IWDFIoTarget * kmdfIoTarget = NULL;
    
        this->GetFxDevice()->GetDefaultIoTarget (&kmdfIoTarget);
    
        Request->FormatUsingCurrentType();
    
        hr = Request->Send (
            kmdfIoTarget, 
            0,  // 0 Submits Asynchronous else use WDF_REQUEST_SEND_OPTION_SYNCHRONOUS
            0);