FLT_CALLBACK_DATA 구조체(fltkernel.h)
FLT_CALLBACK_DATA 구조체는 I/O 작업을 나타냅니다. 필터 관리자 및 미니 필터는 이 구조를 사용하여 I/O 작업을 시작하고 처리합니다.
구문
typedef struct _FLT_CALLBACK_DATA {
FLT_CALLBACK_DATA_FLAGS Flags;
PETHREAD Thread;
PFLT_IO_PARAMETER_BLOCK Iopb;
IO_STATUS_BLOCK IoStatus;
struct _FLT_TAG_DATA_BUFFER *TagData;
union {
struct {
LIST_ENTRY QueueLinks;
PVOID QueueContext[2];
};
PVOID FilterContext[4];
};
KPROCESSOR_MODE RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;
멤버
Flags
I/O 작업을 설명하는 플래그의 비트 마스크입니다.
미니필터는 다음 플래그를 설정할 수 있습니다.
플래그 | 의미 |
---|---|
FLTFL_CALLBACK_DATA_DIRTY | 미니 필터는 이 플래그를 설정( FltSetCallbackDataDirty 호출)하여 콜백 데이터 구조의 내용을 수정했음을 나타냅니다. (자세한 내용은 다음 주의 섹션을 참조하세요.) |
참고
필터 관리자만 다음 플래그를 설정할 수 있습니다.
필터 관리자가 콜백 데이터 구조를 초기화할 때 콜백 데이터 구조가 나타내는 I/O 작업의 형식을 지정하는 다음 플래그 중 하나를 설정합니다.
플래그 | 의미 |
---|---|
FLTFL_CALLBACK_DATA_FAST_IO_OPERATION | 콜백 데이터 구조는 빠른 I/O 작업을 나타냅니다. |
FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION | 콜백 데이터 구조는 파일 시스템 미니필터 콜백 작업을 나타냅니다. |
FLTFL_CALLBACK_DATA_IRP_OPERATION | 콜백 데이터 구조는 IRP(I/O 요청 패킷) 기반 작업을 나타냅니다. |
참고
필터 관리자만 다음 플래그를 설정할 수 있습니다.
필터 관리자가 콜백 데이터 구조를 초기화할 때 다음 플래그를 설정할 수도 있습니다.
플래그 | 의미 |
---|---|
FLTFL_CALLBACK_DATA_GENERATED_IO | 콜백 데이터 구조는 미니필터에서 생성된 I/O 작업을 나타냅니다. 이 플래그는 IRP 기반 작업에만 유효합니다. |
FLTFL_CALLBACK_DATA_REISSUED_IO | 콜백 데이터 구조는 미니필터에 의해 재발행되는 I/O 작업을 나타냅니다. (I/O 작업을 다시 실행하기 위해 미니필터는 FltReissueSynchronousIo를 호출합니다.) 이 플래그는 IRP 기반 작업에만 유효합니다. |
FLTFL_CALLBACK_DATA_SYSTEM_BUFFER | I/O 작업에 대한 버퍼가 비페이지 풀에서 할당되었습니다. 이 플래그는 모든 유형의 I/O 작업에 대해 설정할 수 있습니다. 미니필터는 이 플래그를 설정해서는 안 됩니다. |
참고
필터 관리자만 다음 플래그를 설정할 수 있습니다.
필터 관리자가 콜백 데이터 구조가 나타내는 I/O 작업에 대한 완료 처리를 수행할 때 다음 플래그 중 하나 또는 둘 다를 설정합니다.
플래그 | 의미 |
---|---|
FLTFL_CALLBACK_DATA_DRAINING_IO | 필터 관리자는 이 플래그를 설정하여 현재 I/O 작업에 대한 완료 노드를 드레이닝하고 있음을 나타냅니다. 이 플래그는 I/O 완료 중에만 유효합니다. |
FLTFL_CALLBACK_DATA_POST_OPERATION | 필터 관리자는 현재 작업에 대해 등록된 PFLT_POST_OPERATION_CALLBACK(사후 작업 콜백) 루틴을 호출하고 있음을 나타내도록 이 플래그를 설정합니다. 이 플래그는 I/O 완료 중에만 유효합니다. |
Thread
I/O 작업을 시작한 스레드에 대한 포인터입니다. 이 필드는 NULL일 수 있습니다.
Iopb
I/O 작업에 대한 매개 변수를 포함하는 FLT_IO_PARAMETER_BLOCK 구조체에 대한 포인터입니다.
IoStatus
I/O 작업에 대한 상태 및 정보를 포함하는 IO_STATUS_BLOCK 구조체입니다. 미니필터는 FLT_PREOP_COMPLETE 반환하려는 PFLT_PRE_OPERATION_CALLBACK(사전 작업 콜백) 루틴 또는 FLT_POSTOP_FINISHED_PROCESSING 반환하려는 작업 후 콜백(PFLT_POST_OPERATION_CALLBACK) 루틴에서만 이 구조체의 내용을 수정할 수 있습니다. 그렇지 않으면 이 구조체의 내용은 일반적으로 필터 관리자에 의해 설정됩니다.
TagData
I/O 작업에 대한 재분석 지점 데이터를 포함하는 FLT_TAG_DATA_BUFFER 구조체에 대한 포인터입니다. 이 포인터는 사후 만들기 경로에서만 유효합니다. 따라서 미니필터의 작업 후 콜백 루틴만 이 멤버의 값을 변경할 수 있습니다. 미니필터의 생성 후 콜백 루틴은 다른 FLT_TAG_DATA_BUFFER 구조를 가리키도록 이 멤버를 변경할 수 있습니다. 그러나 멤버가 다른 구조를 가리키도록 변경하는 경우 먼저 ExFreePool 을 호출하여 풀 메모리 누수를 방지하기 위해 기존 구조를 해제해야 합니다.
QueueLinks
필터 관리자의 콜백 데이터 큐를 사용하여 I/O 작업을 보류할 때 미니필터가 사용할 수 있는 큐 링크입니다.
QueueContext[2]
필터 관리자의 큐를 사용하여 I/O 작업을 보류할 때 미니필터가 사용할 수 있는 컨텍스트 정보 포인터의 배열입니다.
FilterContext[4]
필터 관리자 큐 이외의 큐를 사용하여 I/O 작업을 보류할 때 미니필터가 사용할 수 있는 컨텍스트 정보 포인터의 배열입니다.
RequestorMode
I/O 작업을 시작한 프로세스의 실행 모드( KernelMode 또는 UserMode)를 나타냅니다.
설명
미니필터는 하나 이상의 I/O 작업에 대한 사전 작업(PFLT_PRE_OPERATION_CALLBACK) 및 PFLT_POST_OPERATION_CALLBACK(사후 작업) 콜백 루틴을 등록합니다. 필터 관리자는 이러한 콜백 루틴 중 하나를 호출하면 콜백 데이터(FLT_CALLBACK_DATA) 구조를 첫 번째 매개 변수로 전달합니다. 이 구조체는 I/O 작업을 나타냅니다.
미니필터의 사전 작업 또는 사후 작업 콜백 루틴은 Thread 및 RequestorMode 멤버를 제외하고 콜백 데이터 구조의 내용을 수정할 수 있습니다. 이 경우 IoStatus 멤버의 콘텐츠도 수정하지 않는 한 FltSetCallbackDataDirty를 호출해야 합니다. 그렇지 않으면 수정된 값이 무시됩니다.
미니필터는 FltReadFile 과 같은 지원 루틴을 호출하거나 FltAllocateCallbackData 를 호출하여 콜백 데이터 구조를 할당하여 I/O 작업을 시작할 수 있습니다. 구조체의 I/O 매개 변수를 초기화하고 구조를 FltPerformSynchronousIo 또는 FltPerformAsynchronousIo에 전달합니다.
미니필터 시작 I/O 작업은 호출 instance 아래에 연결된 미니필터 인스턴스와 파일 시스템으로만 전송됩니다. 지정된 instance 위에 연결된 미니 필터는 I/O 작업을 받지 않습니다.
미니필터는 IRP 기반 I/O 작업만 시작할 수 있습니다. 빠른 I/O 또는 FSFilter(파일 시스템 필터) 콜백 작업을 시작할 수 없습니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | fltkernel.h(Fltkernel.h 포함) |