Compartir a través de


Instalación de un controlador de filtro

Un controlador de filtro PnP puede admitir un dispositivo específico o todos los dispositivos de una clase de configuración de dispositivo y puede asociarse debajo del controlador de función de un dispositivo (un filtro inferior) o superior al controlador de función de un dispositivo (un filtro superior). Consulte Tipos de controladores WDM para obtener más información sobre las capas de controladores PnP.

Instalación de un controlador de filtro específico del dispositivo

En Windows 10 versión 1903 y posteriores, se puede registrar un controlador de filtro específico del dispositivo mediante una directiva AddFilter inf de una sección INF DDInstall.Filters. Consulte Ordenación de controladores de filtro de dispositivos para obtener más información.

Para versiones anteriores de Windows, para registrar un controlador de filtro específico del dispositivo, cree una entrada del Registro a través de una entrada AddReg en DDInstall. Sección HW del archivo INF del dispositivo. Para un filtro superior específico del dispositivo, cree una entrada denominada UpperFilters. Para un filtro inferior específico del dispositivo, cree una entrada denominada LowerFilters. Por ejemplo, el siguiente extracto inf instala ExampleFilterDriver como filtro superior en el controlador 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

Instalación de un controlador de filtro de clases

Para instalar un filtro superior o inferior de toda la clase para una clase de configuración de dispositivo, puede proporcionar una aplicación de instalación de dispositivos que instale los servicios necesarios. A continuación, la aplicación puede registrar el servicio como un filtro superior o inferior para las clases de configuración de dispositivos deseadas. Para copiar los archivos binarios de servicio, la aplicación puede usar SetupInstallFilesFromInfSection. Para instalar los servicios, la aplicación puede usar SetupInstallServicesFromInfSection. Para registrar los servicios como filtros superiores o inferiores para determinadas clases de configuración de dispositivos, la aplicación llama a SetupInstallFromInfSection para cada clase de configuración de dispositivo de interés, mediante el identificador de clave del Registro que recuperaron de SetupDiOpenClassRegKey para el parámetro RelativeKeyRoot . Por ejemplo, considere las secciones INF siguientes:

[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

La aplicación de instalación de dispositivos haría lo siguiente:

  1. Llame a SetupInstallFilesFromInfSection para la sección [upperfilter_inst].

  2. Llame a SetupInstallServicesFromInfSection para el [upperfilter_inst. Sección Servicios].

  3. Llame a SetupInstallFromInfSection para la sección [upperfilter_inst], una vez para cada clave de clase para la que desea registrar el servicio upperfilt .

Cada llamada especificaría SPINST_REGISTRY para el argumento Flags , para indicar que solo se deben realizar modificaciones del Registro.