Installare un driver di filtro

Un driver di filtro PnP può supportare un dispositivo specifico o tutti i dispositivi in una classe di configurazione del dispositivo e può collegarsi sotto il driver di funzione di un dispositivo (un filtro inferiore) o superiore al driver di funzione di un dispositivo (un filtro superiore). Per altre informazioni sui livelli del driver PnP, vedere Tipi di driver WDM .

Installare un driver di filtro specifico del dispositivo

In Windows 10 versione 1903 e successive è possibile registrare un driver di filtro specifico del dispositivo usando una direttiva INF AddFilter da una sezione INF DDInstall.Filters. Per altre informazioni, vedere Ordinamento dei driver di filtro dei dispositivi.

Per le versioni precedenti di Windows, per registrare un driver di filtro specifico del dispositivo, creare una voce del Registro di sistema tramite una voce AddReg in DDInstall. Sezione HW del file INF del dispositivo. Per un filtro superiore specifico del dispositivo, creare una voce denominata UpperFilters. Per un filtro inferiore specifico del dispositivo, creare una voce denominata LowerFilters. Ad esempio, l'estratto INF seguente installa ExampleFilterDriver come filtro superiore nel driver ExampleFunctionDriver :

[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

Installare un driver di filtro classi

Per installare un filtro superiore o inferiore a livello di classe per una classe di installazione del dispositivo, è possibile fornire un'applicazione di installazione del dispositivo che installa i servizi necessari. L'applicazione può quindi registrare il servizio come filtro superiore o inferiore per le classi di configurazione del dispositivo desiderate. Per copiare i file binari del servizio, l'applicazione può usare SetupInstallFilesFromInfSection. Per installare i servizi, l'applicazione può usare SetupInstallServicesFromInfSection. Per registrare i servizi come filtri superiori e/o inferiori per specifiche classi di installazione del dispositivo, l'applicazione chiama SetupInstallFromInfSection per ogni classe di installazione del dispositivo di interesse, usando la chiave del Registro di sistema recuperata da SetupDiOpenClassRegKey per il parametro RelativeKeyRoot . Si considerino ad esempio le sezioni INF seguenti:

[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

L'applicazione di installazione del dispositivo:

  1. Chiamare SetupInstallFilesFromInfSection per la sezione [upperfilter_inst].

  2. Chiamare SetupInstallServicesFromInfSection per il [upperfilter_inst. Sezione Services] (Servizi).

  3. Chiamare SetupInstallFromInfSection per la sezione [upperfilter_inst], una volta per ogni chiave di classe per cui vuole registrare il servizio upperfilt .

Ogni chiamata specifica SPINST_REGISTRY per l'argomento Flags , per indicare che è necessario eseguire solo le modifiche del Registro di sistema.