다음을 통해 공유


I/O 작업에 대한 매개 변수 수정

미니필터 드라이버는 I/O 작업에 대한 매개 변수를 수정할 수 있습니다. 예를 들어 미니필터 드라이버의 사전 운용 콜백 루틴은 작업에 대한 대상 instance 변경하여 I/O 작업을 다른 볼륨으로 리디렉션할 수 있습니다. 새 대상 instance 다른 볼륨의 동일한 고도에서 동일한 미니필터 드라이버의 instance 있어야 합니다.

I/O 작업에 대한 매개 변수는 작업에 대한 콜백 데이터(FLT_CALLBACK_DATA) 구조 및 I/O 매개 변수 블록(FLT_IO_PARAMETER_BLOCK) 구조체에 있습니다. 미니필터 드라이버의 사전 운용 콜백 루틴사후 콜백 루틴데이터 입력 매개 변수의 작업에 대한 콜백 데이터 구조에 대한 포인터를 받습니다. 콜백 데이터 구조의 Iopb 멤버는 작업에 대한 매개 변수를 포함하는 I/O 매개 변수 블록 구조에 대한 포인터입니다.

미니필터 드라이버의 사전 운용 콜백 루틴이 I/O 작업에 대한 매개 변수를 수정하는 경우 미니필터 드라이버 instance 스택의 해당 미니필터 드라이버 아래의 모든 미니필터 드라이버는 사전 운용 및 사후 콜백 루틴에서 수정된 매개 변수를 받습니다.

수정된 매개 변수는 현재 미니필터 드라이버의 사후 콜백 루틴 또는 미니필터 드라이버 instance 스택의 해당 미니필터 드라이버 위에 있는 미니필터 드라이버에서 수신되지 않습니다. 모든 상황에서 미니필터 드라이버의 사전 운용 및 사후 콜백 루틴은 지정된 I/O 작업에 대해 동일한 입력 매개 변수 값을 받습니다.

I/O 작업에 대한 매개 변수를 수정한 후, 콜백 데이터 구조의 IoStatus 필드 내용을 변경하지 않는 한 사전 운용 또는 사후 콜백 루틴은 FltSetCallbackDataDirty를 호출하여 이를 수행했음을 나타내야 합니다. 그렇지 않으면 필터 관리자는 매개 변수 값에 대한 변경 내용을 무시합니다. FltSetCallbackDataDirty 는 I/O 작업에 대한 콜백 데이터 구조의 FLTFL_CALLBACK_DATA_DIRTY 플래그를 설정합니다. 미니필터 드라이버는 FltIsCallbackDataDirty 를 호출하여 이 플래그를 테스트하거나 FltClearCallbackDataDirty를 호출하여 플래그를 지울 수 있습니다.

미니필터 드라이버의 사전 운용 콜백 루틴이 I/O 작업에 대한 매개 변수를 수정하는 경우 미니필터 드라이버 instance 스택의 해당 미니필터 드라이버 아래의 모든 미니필터 드라이버는 데이터FltObjects 입력 매개 변수에서 수정된 매개 변수를 해당 사전 운용 및 사후 콜백 루틴으로 받습니다. (미니필터 드라이버는 FltObjects 매개 변수가 가리키는 FLT_RELATED_OBJECTS 구조체의 내용을 직접 수정할 수 없습니다. 그러나 미니필터 드라이버가 I/O 작업에 대한 대상 instance 또는 대상 파일 개체를 수정하는 경우 필터 관리자는 하위 미니필터 드라이버에 전달되는 FLT_RELATED_OBJECTS 구조체의 해당 Instance 또는 FileObject 멤버 값을 수정합니다.)

미니필터 드라이버의 사전 운용 콜백 루틴이 만드는 매개 변수 변경은 미니필터 드라이버의 자체 사후 콜백 루틴에서 수신되지 않지만, 사전 운용 콜백 루틴은 변경된 매개 변수에 대한 정보를 미니필터 드라이버의 자체 사후 콜백 루틴에 전달할 수 있습니다. 사전 운용 콜백 루틴이 FLT_PREOP_SUCCESS_WITH_CALLBACK 또는 FLT_PREOP_SYNCHRONIZE 반환하여 I/O 작업을 스택 아래로 전달하는 경우 변경된 매개 변수 값에 대한 정보를 CompletionContext 출력 매개 변수가 가리키는 미니필터 드라이버 정의 구조에 저장할 수 있습니다. 필터 관리자는 CompletionContext 입력 매개 변수의 이 구조체 포인터를 사후 콜백 루틴에 전달합니다.

I/O 작업에 대한 매개 변수에 대한 자세한 내용은 FLT_CALLBACK_DATAFLT_IO_PARAMETER_BLOCK 참조하세요.