Instalar um driver de filtro

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

Instalar um driver de filtro específico do dispositivo

No Windows 10 versão 1903 e posterior, um driver de filtro específico do dispositivo pode ser registrado usando uma diretiva INF AddFilter de uma seção INF DDInstall.Filters. Consulte Ordenação de driver de filtro de dispositivo para obter mais informações.

Para versões anteriores do Windows, para registrar um driver de filtro específico do dispositivo, crie uma entrada do Registro por meio de uma entrada AddReg no DDInstall. Seção HW do arquivo INF do dispositivo. Para um filtro superior específico do dispositivo, crie uma entrada chamada UpperFilters. Para um filtro inferior específico do dispositivo, crie uma entrada chamada LowerFilters. Por exemplo, o trecho INF a seguir instala ExampleFilterDriver como um 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

Instalar um driver de filtro de classe

Para instalar um filtro superior ou inferior de toda a classe para uma classe de configuração de dispositivo, você pode fornecer um aplicativo de instalação de dispositivo que instala os serviços necessários. Em seguida, o aplicativo pode registrar o serviço como sendo um filtro superior ou inferior para as classes de configuração de dispositivo desejadas. Para copiar os binários de serviço, o aplicativo pode usar SetupInstallFilesFromInfSection. Para instalar os serviços, o aplicativo pode usar SetupInstallServicesFromInfSection. Para registrar os serviços como filtros superiores e/ou inferiores para classes de configuração de dispositivo específicas, o aplicativo chama SetupInstallFromInfSection para cada classe de configuração de dispositivo de interesse, usando o identificador de chave do Registro recuperado de SetupDiOpenClassRegKey para o parâmetro RelativeKeyRoot . Por exemplo, considere as seguintes seçõ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

O aplicativo de instalação do dispositivo:

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

  2. Chame SetupInstallServicesFromInfSection para o [upperfilter_inst. Seção Serviços].

  3. Chame SetupInstallFromInfSection para a seção [upperfilter_inst], uma vez para cada chave de classe para a qual deseja registrar o serviço upperfilt .

Cada chamada especificaria SPINST_REGISTRY para o argumento Flags , para indicar que apenas as modificações do Registro precisam ser executadas.