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
裝置安裝應用程式會:
呼叫 SetupInstallFilesFromInfSection 的 [upperfilter_inst] 區段。
呼叫 SetupInstallServicesFromInfSection 以處理 [upperfilter_inst.Services] 區段。
對於 [upperfilter_inst] 區段,呼叫 SetupInstallFromInfSection 一次,以便為每個類別鍵註冊 upperfilt 服務。
每個呼叫都會為 Flags 自變數指定SPINST_REGISTRY,以指出只需要執行登錄修改。