Windows/Windows Driver Model

Filter Manager - FLT_CALLBACK_DATA

MOLOKINI 2015. 8. 14. 12:56

필터매니저를 공부하다보니 미니필터와 필터매니저에서 사용하는 FLT_CALLBACK_DATA 구조체를 다루게 되었습니다.

 

 

FLT_CALLBACK_DATA 구조체는 I/O 오퍼레이션의 정보들을 담고 있습니다.

요렇게 구성되어 있습니다.

- https://msdn.microsoft.com/en-us/library/windows/hardware/ff544620(v=vs.85).aspx

 

Flags : 비트마스크로 표현되는 IO 입출력 동작을 담는 공간

아래는 미니필터에서만 사용되는 플래그

- FLTFL_CALLBACK_DATA_DIRTY : 구조체의 값이 변경된 적이 있으면 세팅

 

아래는 필터매니저에서만 사용되는 플래그로 필터링 할 I/O 동작의 콜백 구조체를 가리키는 플래그들입니다.

- FLTFL_CALLBACK_DATA_FAST_IO_OPERATION : Fast I/O 오퍼레이션을 사용할 때 세팅되는 플래그 (필터매니저에서 사용)

- FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION : 미니필터의 콜백을 담고있을 때 세팅되는 플래그

- FLTFL_CALLBACK_DATA_IRP_OPERATION : IRP동작이 일어나면 세팅되는 플래그

 

아래 역시 필터매니저에서만 사용되는 플래그로 콜백데이터(FLT_CALLBACK_DATA, 지금 설명하는 구조체) 구조체를 초기화 할 때 사용

- FLTFL_CALLBACK_DATA_GENERATED_IO : 미니필터로부터 전달받은 I/O 오퍼레이션을 담을 때 세팅되는 플래그

- FLTFL_CALLBACK_DATA_REISSUED_IO : 미니필터로 인해 다시 생성된 I/O 오퍼레이션, (미니필터가 fltReissuedSynchronousIo 함수를 사용해 필터매니저로 I/O를 전달할 때 설정되는 플래그)

- FLTFL_CALLBACK_DATA_SYSTEM_BUFFER : I/O가 넌페이지드 풀에 할당될 때 설정되는 플래그

 

아래는 필터매니저가 I/O 완료처리를 할 때 세트되는 플래그

- FLTFL_CALLBACK_DATA_DRAINING_IO : I/O 완료처리할 때 세트

- FLTFL_CALLBACK_DATA_POST_OPERATION : PFLT_POST_OPERATION_CALLBACK으로 완료될 때 세트 (POST_OPERATION에 대해서는 나중에 알아보도록 하겠습니다)

 

Thread : I/O 오퍼레이션을 발생시킨 스레드의 포인터

Iopb : FLT_IO_PARAMETER_BLOCK 구조체로 I/O에 대한 파라미터들을 가지고 있음

ioStatus : IO_STATUS_BLOCK 구조체로 IO의 상태를 담고 있음, 이 IO_STATUS_BLOCK은 ntStatus 형태로 IO의 상태를 표시 (그 외 구조체 내부에 다른 정보들도 있지만,, 우선 생략)

TagData : I/O 오퍼레이션의 리파스 포인트 (심볼릭 링크)

QueueLink, QueueContext : 필터매니저의 콜백데이터들을 연결하여 큐처럼 사용, I/O 오퍼레이션들을 묶어서 큐잉하고 펜딩시키면서 하나씩 처리하는데 사용함, 링크와 컨텍스트 포인터를 의미함

FilterContext : 필터매니저 큐의 컨텍스트 (I/O 오퍼레이션 펜딩용)

RequesterMode : I/O 오퍼레이션이 커널모드인지 유저모드인지 표시

 

한마디로 I/O 오퍼레이션 정보들을 담고있다고 볼 수 있습니다.

다음은 빨간색으로 표시한 FLT_IO_PARAMETER_BLOCK 구조체를 알아보도록 하겠습니다.