Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 se fixer 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 propre à un périphérique
Sur Windows 10 version 1903 et ultérieure, un pilote de filtre spécifique à un périphérique peut être inscrit à l’aide d’une directive AddFilter INF à partir d’une section INF DDInstall.Filters. Pour plus d’informations, consultez Ordonnancement des pilotes de filtre de périphérique.
Pour les versions antérieures de Windows, pour enregistrer un pilote de filtre spécifique au périphérique, créez une entrée de Registre via une entrée AddReg dans la section DDInstall.HW du fichier INF du périphérique. 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 comme 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 de périphériques, vous pouvez fournir une application d’installation de périphériques 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 de configuration 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 de configuration de périphériques spécifiques, l’application appelle SetupInstallFromInfSection pour chaque classe de configuration de périphériques concernée, à l’aide du handle de clé de Registre qu’elle a récupéré à partir de SetupDiOpenClassRegKey pour le paramètre RelativeKeyRoot. Par exemple, tenez compte des 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 permettrait de :
Appelez SetupInstallFilesFromInfSection pour la section [upperfilter_inst].
Appelez SetupInstallServicesFromInfSection pour la section [upperfilter_inst.Services].
Appelez SetupInstallFromInfSection pour la section [upperfilter_inst], une fois pour chaque clé de classe pour laquelle le service upperfilt doit être enregistré.
Chaque appel spécifie SPINST_REGISTRY pour l’argument Indicateurs afin d’indiquer que seules les modifications du Registre doivent être effectuées.