필터 드라이버 설치

PnP 필터 드라이버는 디바이스 설정 클래스 의 특정 디바이스 또는 모든 디바이스를 지원할 수 있으며 디바이스의 함수 드라이버(하위 필터) 또는 디바이스의 함수 드라이버(상위 필터) 위에 연결할 수 있습니다. PnP 드라이버 계층에 대한 자세한 내용은 WDM 드라이버 유형을 참조하세요.

디바이스별 필터 드라이버 설치

Windows 10 버전 1903 이상에서는 INF DDInstall.Filters 섹션INF AddFilter 지시문을 사용하여 디바이스별 필터 드라이버를 등록할 수 있습니다. 자세한 내용은 디바이스 필터 드라이버 순서 지정 을 참조하세요.

이전 버전의 Windows의 경우 디바이스별 필터 드라이버를 등록하려면 DDInstallAddReg 항목을 통해 레지스트리 항목을 만듭니다. 디바이스의 INF 파일의 HW 섹션입니다. 디바이스별 상위 필터의 경우 UpperFilters라는 항목을 만듭니다. 디바이스별 하위 필터의 경우 LowerFilters라는 항목을 만듭니다. 예를 들어 다음 INF 발췌문은 ExampleFunctionDriver 드라이버에 ExampleFilterDriver를 상위 필터로 설치합니다.

[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을 사용할 수 있습니다. 특정 디바이스 설정 클래스에 대한 상위 및/또는 하위 필터로 서비스를 등록하기 위해 애플리케이션은 RelativeKeyRoot 매개 변수에 대해 SetupDiOpenClassRegKey에서 검색한 레지스트리 키 핸들을 사용하여 관심 있는 각 디바이스 설정 클래스에 대해 SetupInstallFromInfSection을 호출합니다. 예를 들어 다음 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. [upperfilter_inst] 섹션에 대해 SetupInstallFilesFromInfSection 을 호출합니다.

  2. [upperfilter_inst 대해 SetupInstallServicesFromInfSection 을 호출합니다. Services] 섹션.

  3. [upperfilter_inst] 섹션에 대해 SetupInstallFromInfSection 을 호출합니다. 각 클래스 키에 대해 한 번은 상위 파일 서비스를 등록하려고 합니다.

각 호출은 Flags 인수에 대한 SPINST_REGISTRY 지정하여 레지스트리 수정만 수행해야 함을 나타냅니다.