UMDF 필터 드라이버 설치
필터 드라이버는 설정 클래스의 특정 디바이스 또는 모든 디바이스를 지원할 수 있습니다. 하위 필터 드라이버는 디바이스의 함수 드라이버 아래에 연결되며, 상위 필터는 디바이스의 함수 드라이버 위에 연결됩니다.
이 항목에서는 UMDF(User-Mode Driver Framework) 디바이스별(상하) 필터 드라이버를 설치하고 구성하는 방법에 대해 설명합니다. UMDF를 사용하여 클래스 필터 드라이버를 작성할 수 없습니다. 이 항목은 UMDF 버전 1과 2 모두에 적용됩니다.
디바이스 스택을 구조화할 때 프레임워크는 현재 스택당 하나의 연속된 UMDF 드라이버 블록만 지원합니다. 또한 동일한 디바이스 스택에 UMDF 버전 1 및 버전 2 드라이버를 설치할 수 없습니다.
드라이버를 설치하고 구성하는 방법
UMDF 1 필터 드라이버는 IDriverEntry::OnDeviceAdd 콜백 함수에서 IWDFDeviceInitialize::SetFilter를 호출해야 합니다. UMDF 버전 2부터 드라이버는 대신 WdfFdoInitSetFilter를 호출합니다.
드라이버에서 지정할 수 있는 UMDF 관련 지시문 외에도 UmdfService 및 UmdfServiceOrder 지시문을 지정해야 합니다. 이 항목에서는 상위 필터 드라이버를 지정합니다.
[<mydriver>_Install.NT.Wdf] UmdfService=UMDFFunction,WUDFFuncDriver_Install UmdfService=UMDFFilter,UMDFFilter_Install UmdfServiceOrder=UMDFFunction,UMDFFilter드라이버는 UmdfServiceOrder 항목에 나열된 순서대로 디바이스 스택에 추가됩니다. 첫 번째 매개 변수는 디바이스 스택에서 가장 낮은 UMDF 드라이버를 지정합니다. 더 낮은 필터 드라이버를 설치하려면 UmdfServiceOrder에 대한 인수를 되돌리기만 하면됩니다.
이러한 및 기타 UMDF 관련 INF 지시문에 대한 자세한 내용은 INF 파일에서 WDF 지시문 지정을 참조하세요.
드라이버의 디바이스 스택에 UMDF 드라이버만 포함된 경우 이 단계를 건너뜁니다.
드라이버의 디바이스 스택에 UMDF가 아닌 드라이버가 포함된 경우 INF 파일에는 리플렉터를 상위 필터 드라이버로 지정하는 AddReg 섹션이 포함되어야 합니다.
[<mydriver>_Device_AddReg] ; Load the redirector as an upperfilter on this specific device. ; 0x00010008 - FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND HKR,,"UpperFilters",0x00010008,"WUDFRd"드라이버가 상위 필터로 로드되면 I/O 요청을 스택의 다음 드라이버로 전달해야 합니다. 설명하기 위해 KMDF 함수 드라이버 위에 있는 간단한 통과 드라이버(UMDF 버전 1)를 고려해 보세요.
먼저 기본 I/O 대상(스택의 다음 드라이버)의 인터페이스를 검색합니다. 그런 다음 요청을 포맷하고 보냅니다. 가장 간단한 시나리오는 다음과 같습니다.
IWDFIoTarget * kmdfIoTarget = NULL; this->GetFxDevice()->GetDefaultIoTarget (&kmdfIoTarget); Request->FormatUsingCurrentType(); hr = Request->Send ( kmdfIoTarget, 0, // 0 Submits Asynchronous else use WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 0);