Installieren eines Filtertreibers

Ein PnP-Filtertreiber kann ein bestimmtes Gerät oder alle Geräte in einer Geräteinstallationsklasse unterstützen und unter dem Funktionstreiber eines Geräts (einem niedrigeren Filter) oder über dem Funktionstreiber eines Geräts (einem oberen Filter) angefügt werden. Weitere Informationen zu PnP-Treiberebenen finden Sie unter Typen von WDM-Treibern.

Gerätespezifischen Filtertreiber installieren

Auf Windows 10 Version 1903 und höher kann ein gerätespezifischer Filtertreiber mithilfe einer INF-AddFilter-Direktive aus einem INF DDInstall.Filters-Abschnitt registriert werden. Weitere Informationen finden Sie unter Reihenfolge von Gerätefiltertreibern.

Erstellen Sie für frühere Versionen von Windows zum Registrieren eines gerätespezifischen Filtertreibers einen Registrierungseintrag über einen AddReg-Eintrag im DDInstall.HW-Abschnitt der INF-Datei des Geräts. Erstellen Sie für einen gerätespezifischen oberen Filter einen Eintrag mit dem Namen UpperFilters. Erstellen Sie für einen gerätespezifischen Lower-Filter einen Eintrag namens LowerFilters. Der folgende INF-Auszug installiert ExampleFilterDriver beispielsweise als oberer Filter auf dem ExampleFunctionDriver-Treiber :

[Example_install]
CopyFiles=Filter_copyfiles, Function_copyfiles

[Example_install.HW]
AddReg=Filter_addreg

[Example_install.Services]
AddService=ExampleFunctionDriver,0x00000002,Function_ServiceInstallSection
AddService=ExampleFilterDriver,,Filter_ServiceInstallSection

[Filter_addreg]
HKR,,"UpperFilters",0x00010000,"ExampleFilterDriver" ; REG_MULTI_SZ value

[Filter_ServiceInstallSection]
DisplayName    = %Filter_ServiceDesc%
ServiceType    = 1     ; SERVICE_KERNEL_DRIVER
StartType      = 3     ; SERVICE_DEMAND_START
ErrorControl   = 1     ; SERVICE_ERROR_NORMAL
ServiceBinary  = %13%\ExampleFilterDriver.sys

Installation eines Klassenfiltertreibers

Um einen klassenweiten oberen oder unteren Filter für eine Geräteinstallationsklasse zu installieren, können Sie eine Geräteinstallationsanwendung bereitstellen, die die erforderlichen Dienste installiert. Die Anwendung kann den Dienst dann als Ober- oder Unterfilter für die gewünschten Geräteinstallationsklassen registrieren. Um die Dienstbinärdateien zu kopieren, kann die Anwendung SetupInstallFilesFromInfSection verwenden. Um die Dienste zu installieren, kann die Anwendung SetupInstallServicesFromInfSection verwenden. Um die Dienste für bestimmte Geräte-Setupklassen als obere und/oder untere Filter zu registrieren, ruft die Anwendung SetupInstallFromInfSection für jede relevante Geräte-Setupklasse auf und verwendet dabei das Handle des Registrierungsschlüssels, das sie mit SetupDiOpenClassRegKey für den Parameter RelativeKeyRoot abgerufen hat. Betrachten Sie beispielsweise die folgenden INF-Abschnitte:

[DestinationDirs]
upperfilter_copyfiles = 13

[upperfilter_inst]
CopyFiles = upperfilter_copyfiles
AddReg = upperfilter_addreg

[upperfilter_copyfiles]
upperfilt.sys,,,0x00004000  ; COPYFLG_IN_USE_RENAME

[upperfilter_addreg]
; append this service to existing REG_MULTI_SZ list, if any
HKR,,"UpperFilters",0x00010008,"upperfilt"

[upperfilter_inst.Services]
AddService = upperfilt,,upperfilter_service

[upperfilter_service]
DisplayName   = %upperfilter_ServiceDesc%
ServiceType   = 1   ; SERVICE_KERNEL_DRIVER
StartType     = 3   ; SERVICE_DEMAND_START
ErrorControl  = 1   ; SERVICE_ERROR_NORMAL
ServiceBinary = %13%\upperfilt.sys

Die Geräteinstallationsanwendung würde Folgendes tun:

  1. Rufen Sie SetupInstallFilesFromInfSection für den Abschnitt [upperfilter_inst] auf.

  2. Rufen Sie SetupInstallServicesFromInfSection für den Abschnitt [upperfilter_inst.Services] auf.

  3. Rufen Sie SetupInstallFromInfSection für den Abschnitt [upperfilter_inst] einmal für jeden Klassenschlüssel auf, für den der Abschnitt den Upperfilt-Dienst registrieren will.

Jeder Aufruf würde SPINST_REGISTRY für das Flags-Argument angeben, um anzugeben, dass nur Registrierungsänderungen ausgeführt werden müssen.