Installieren eines Filtertreibers

Ein PnP-Filtertreiber kann ein bestimmtes Gerät oder alle Geräte in einer Geräteeinrichtungsklasse unterstützen und unterhalb des Funktionstreibers eines Geräts (niedrigerer Filter) oder oberhalb des Gerätefunktionstreibers (oberer Filter) anfügen. Weitere Informationen zu PnP-Treiberebenen finden Sie unter Typen von WDM-Treibern .

Installieren eines gerätespezifischen Filtertreibers

Ab Windows 10 Version 1903 kann ein gerätespezifischer Filtertreiber mithilfe einer INF AddFilter-Anweisung aus einem INF DDInstall.Filters-Abschnitt registriert werden. Weitere Informationen finden Sie unter Bestellung von Gerätefiltertreibern .

Für frühere Versionen von Windows erstellen Sie einen Registrierungseintrag über einen AddReg-Eintrag im DDInstall, um einen gerätespezifischen Filtertreiber zu registrieren. 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 unteren Filter einen Eintrag mit dem Namen LowerFilters. Im folgenden INF-Auszug wird exampleFilterDriver beispielsweise als oberer Filter auf dem ExampleFunctionDriver-Treiber installiert:

[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

Installieren eines Klassenfiltertreibers

Um einen klassenweiten oberen oder unteren Filter für eine Geräteeinrichtungsklasse 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ätesetupklassen registrieren. Zum Kopieren der Dienstbinärdateien kann die Anwendung SetupInstallFilesFromInfSection verwenden. Zum Installieren der Dienste kann die Anwendung SetupInstallServicesFromInfSection verwenden. Um die Dienste als ober- und/oder untere Filter für bestimmte Gerätesetupklassen zu registrieren, ruft die Anwendung SetupInstallFromInfSection für jede gerätespezifische Setupklasse auf. Dabei wird das Registrierungsschlüsselhandle verwendet, das sie aus SetupDiOpenClassRegKey für den RelativeKeyRoot-Parameter abgerufen haben. 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 ausführen:

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

  2. Rufen Sie SetupInstallServicesFromInfSection für die [upperfilter_inst auf. Dienste] Abschnitt.

  3. Rufen Sie setupInstallFromInfSection für den Abschnitt [upperfilter_inst] einmal für jeden Klassenschlüssel auf, für den der upperfilt-Dienst registriert werden soll.

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