Поделиться через


Установка драйвера фильтра

Драйвер фильтра PnP может поддерживать определенное устройство или все устройства в классе настройки устройства и может подключаться под драйвером функции устройства (нижний фильтр) или над драйвером функции устройства (верхний фильтр). Дополнительные сведения об уровнях драйверов PnP см. в разделе Типы драйверов WDM .

Установка драйвера фильтра для конкретного устройства

В Windows 10 версии 1903 и более поздних версиях драйвер фильтра для конкретного устройства можно зарегистрировать с помощью директивы INF AddFilter из раздела INF DDInstall.Filters. Дополнительные сведения см. в разделе Порядок драйверов фильтров устройств .

Для более ранних версий Windows, чтобы зарегистрировать драйвер фильтра для конкретного устройства, создайте запись реестра с помощью записи AddReg в DDInstall. Раздел HW INF-файла устройства. Для верхнего фильтра для конкретного устройства создайте запись с именем UpperFilters. Для нижнего фильтра для конкретного устройства создайте запись с именем LowerFilters. Например, следующий фрагмент INF устанавливает ExampleFilterDriver в качестве верхнего фильтра для драйвера 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

Установка драйвера фильтра классов

Чтобы установить верхний или нижний фильтр на уровне класса для класса установки устройства, можно указать приложение установки устройства , которое устанавливает необходимые службы. Затем приложение может зарегистрировать службу как верхний или нижний фильтр для требуемых классов настройки устройства. Чтобы скопировать двоичные файлы службы, приложение может использовать SetupInstallFilesFromInfSection. Для установки служб приложение может использовать SetupInstallServicesFromInfSection. Чтобы зарегистрировать службы в качестве верхних и (или) нижних фильтров для определенных классов установки устройств, приложение вызывает SetupInstallFromInfSection для каждого интересующего класса установки устройства, используя дескриптор раздела реестра, полученный из SetupDiOpenClassRegKey для параметра RelativeKeyRoot . Например, рассмотрим следующие разделы 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

Приложение установки устройства:

  1. Вызовите setupInstallFilesFromInfSection для раздела [upperfilter_inst].

  2. Вызовите SetupInstallServicesFromInfSection для [upperfilter_inst. Службы] раздел.

  3. Вызовите SetupInstallFromInfSection для раздела [upperfilter_inst] один раз для каждого ключа класса, для которых требуется зарегистрировать службу upperfilt .

Каждый вызов будет указывать SPINST_REGISTRY для аргумента Flags , чтобы указать, что необходимо выполнить только изменения реестра.