Instalar um driver de filtro

Um controlador de filtro PnP pode suportar um dispositivo específico ou todos os dispositivos de uma classe de configuração de dispositivo e pode ser ligado abaixo do controlador de função do dispositivo (um filtro inferior) ou acima do controlador de função do dispositivo (um filtro superior). Consulte Tipos de drivers WDM para mais informações sobre camadas de drivers PnP.

Instale um controlador de filtro específico para o dispositivo

No Windows 10 versão 1903 e posteriores, um controlador de filtro específico de dispositivo pode ser registado usando uma diretiva INF AddFilter de uma secção INF DDInstall.Filters. Consulte Ordenação de drivers de filtro de dispositivo para mais informações.

Para versões anteriores do Windows, para registar um controlador de filtro específico do dispositivo, crie uma entrada de registo através de uma entrada AddReg na secção DDInstall.HW do ficheiro INF do dispositivo. Para um filtro superior específico de cada dispositivo, crie uma entrada chamada UpperFilters. Para um filtro inferior específico do dispositivo, crie uma entrada chamada LowerFilters. Por exemplo, o seguinte excerto INF instala o ExampleFilterDriver como filtro superior no 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

Instale um controlador de filtro de classe

Para instalar um filtro superior ou inferior a nível de classe para uma classe de configuração de dispositivos, pode fornecer uma aplicação de instalação do dispositivo que instale os serviços necessários. A aplicação pode então registar o serviço como sendo um filtro superior ou inferior para as classes de configuração de instalação do dispositivo desejadas. Para copiar os binários de serviço, a aplicação pode usar o SetupInstallFilesFromInfSection. Para instalar os serviços, a aplicação pode usar o SetupInstallServicesFromInfSection. Para registar os serviços como filtros superiores e/ou inferiores para classes específicas de configuração de dispositivos, a aplicação chama SetupInstallFromInfSection para cada classe de configuração de dispositivo de interesse, usando o handle de chave do registo que recuperou de SetupDiOpenClassRegKey para o parâmetro RelativeKeyRoot. Por exemplo, considere as seguintes secções INF:

[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

A aplicação de instalação do dispositivo iria:

  1. Chame SetupInstallFilesFromInfSection para a secção [upperfilter_inst].

  2. Invoque SetupInstallServicesFromInfSection para a secção [upperfilter_inst. Services].

  3. Chame SetupInstallFromInfSection para a secção [upperfilter_inst], uma vez por cada chave de classe para a qual quer registar o serviço upperfilt.

Cada chamada especificaria SPINST_REGISTRY para o argumento Flags , indicando que apenas modificações no registo precisam de ser realizadas.