Dela via


Installera en filterdrivrutin

En PnP-filterdrivrutin kan stödja en specifik enhet eller alla enheter i en enhetsinstallationsklass och kan anslutas under en enhets funktionsdrivrutin (ett lägre filter) eller ovanför en enhets funktionsdrivrutin (ett övre filter). Mer information om PnP-drivrutinslager finns i Typer av WDM-drivrutiner .

Installera en enhetsspecifik filterdrivrutin

I Windows 10 version 1903 och senare kan en enhetsspecifik filterdrivrutin registreras med hjälp av ett INF AddFilter-direktiv från ett INF DDInstall.Filters-avsnitt. Mer information finns i Beställning av enhetsfilterdrivrutiner .

Om du vill registrera en enhetsspecifik filterdrivrutin för tidigare versioner av Windows skapar du en registerpost via en AddReg-post i DDInstall. HW-avsnittet i enhetens INF-fil. Skapa en post med namnet UpperFilters för ett enhetsspecifikt övre filter. Skapa en post med namnet LowerFilters för ett enhetsspecifikt lägre filter. Följande INF-utdrag installerar till exempel ExampleFilterDriver som ett övre filter på ExampleFunctionDriver-drivrutinen :

[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

Installera en klassfilterdrivrutin

Om du vill installera ett klassomfattande övre eller nedre filter för en enhetsinstallationsklass kan du ange ett program för enhetsinstallation som installerar de nödvändiga tjänsterna. Programmet kan sedan registrera tjänsten som ett övre eller lägre filter för de önskade enhetskonfigurationsklasserna. Om du vill kopiera tjänstens binärfiler kan programmet använda SetupInstallFilesFromInfSection. För att installera tjänsterna kan programmet använda SetupInstallServicesFromInfSection. För att registrera tjänsterna som övre och/eller lägre filter för specifika enhetskonfigurationsklasser anropar programmet SetupInstallFromInfSection för varje enhetsinstallationsklass av intresse, med hjälp av registernyckelhandtaget som de hämtade från SetupDiOpenClassRegKey för parametern RelativeKeyRoot . Tänk till exempel på följande INF-avsnitt:

[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

Programmet för enhetsinstallation skulle:

  1. Anropa SetupInstallFilesFromInfSection för avsnittet [upperfilter_inst] .

  2. Anropa SetupInstallServicesFromInfSection för [upperfilter_inst.Services]-avsnittet.

  3. Anropa SetupInstallFromInfSection för avsnittet [upperfilter_inst] en gång för varje klassnyckel som den vill registrera upperfilt-tjänsten för.

Varje anrop anger SPINST_REGISTRY för argumentet Flaggor för att ange att endast registerändringar behöver utföras.