Partager via


Installer un pilote de filtre

Un pilote de filtre PnP peut prendre en charge un appareil spécifique ou tous les appareils d’une classe de configuration d’appareil et peut attacher sous le pilote de fonction d’un appareil (un filtre inférieur) ou au-dessus du pilote de fonction d’un appareil (un filtre supérieur). Pour plus d’informations sur les couches de pilotes PnP, consultez Types de pilotes WDM .

Installer un pilote de filtre spécifique à un appareil

Sur Windows 10 version 1903 et ultérieure, un pilote de filtre spécifique à l’appareil peut être inscrit à l’aide d’une directive INF AddFilter d’une section INF DDInstall.Filters. Pour plus d’informations, consultez Classement des pilotes de filtre d’appareil .

Pour les versions antérieures de Windows, pour inscrire un pilote de filtre spécifique à l’appareil, créez une entrée de Registre via une entrée AddReg dans DDInstall. Section HW du fichier INF de l’appareil. Pour un filtre supérieur spécifique à l’appareil, créez une entrée nommée UpperFilters. Pour un filtre inférieur spécifique à l’appareil, créez une entrée nommée LowerFilters. Par exemple, l’extrait INF suivant installe ExampleFilterDriver en tant que filtre supérieur sur le pilote 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

Installer un pilote de filtre de classe

Pour installer un filtre supérieur ou inférieur à l’échelle de la classe pour une classe d’installation d’appareil, vous pouvez fournir une application d’installation d’appareil qui installe les services nécessaires. L’application peut ensuite inscrire le service comme étant un filtre supérieur ou inférieur pour les classes d’installation d’appareil souhaitées. Pour copier les fichiers binaires de service, l’application peut utiliser SetupInstallFilesFromInfSection. Pour installer les services, l’application peut utiliser SetupInstallServicesFromInfSection. Pour inscrire les services en tant que filtres supérieurs et/ou inférieurs pour des classes d’installation d’appareil particulières, l’application appelle SetupInstallFromInfSection pour chaque classe d’installation d’appareil intéressante, à l’aide du handle de clé de Registre qu’ils ont récupéré à partir de SetupDiOpenClassRegKey pour le paramètre RelativeKeyRoot . Par exemple, considérez les sections INF suivantes :

[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’application d’installation de l’appareil :

  1. Appelez SetupInstallFilesFromInfSection pour la section [upperfilter_inst].

  2. Appelez SetupInstallServicesFromInfSection pour le [upperfilter_inst. Section Services].

  3. Appelez SetupInstallFromInfSection pour la section [upperfilter_inst], une fois pour chaque clé de classe pour laquelle il souhaite inscrire le service upperfilt .

Chaque appel spécifie SPINST_REGISTRY pour l’argument Flags , afin d’indiquer que seules les modifications du Registre doivent être effectuées.