安裝篩選驅動程式

PnP 篩選驅動程式可以支援 裝置安裝類別 中的特定裝置或所有裝置,而且可以附加在裝置函式驅動程式(較低篩選器)或裝置函式驅動程式上方(上層篩選條件)。 如需 PnP 驅動程式層的詳細資訊,請參閱 WDM 驅動程式的類型 。

安裝裝置特定的篩選驅動程式

在 Windows 10 版本 1903 和更新版本上,可以使用 INF DDInstall.Filters 區段中的 INF AddFilter 指示詞來註冊裝置特定的篩選驅動程式。 如需詳細資訊 ,請參閱裝置篩選驅動程式排序 。

針對舊版 Windows,若要註冊裝置特定的篩選驅動程式,請在裝置的 INF 檔案的 DDInstall.HW 區段中,透過 AddReg 專案建立一個登錄專案。 針對裝置特定的上層篩選,建立名為 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.Services] 區段。

  3. 對於 [upperfilter_inst] 區段,呼叫 SetupInstallFromInfSection 一次,以便為每個類別鍵註冊 upperfilt 服務。

每個呼叫都會為 Flags 自變數指定SPINST_REGISTRY,以指出只需要執行登錄修改。