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 요청 패킷) 기반 작업을 나타냅니다. |
메모
필터 관리자만 다음 플래그를 설정할 수 있습니다.
필터 관리자가 콜백 데이터 구조를 초기화할 때 다음 플래그를 설정할 수도 있습니다.
메모
필터 관리자만 다음 플래그를 설정할 수 있습니다.
필터 관리자가 콜백 데이터 구조가 나타내는 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
KernelMode 또는 UserMode I/O 작업을 시작한 프로세스의 실행 모드를 나타냅니다.
발언
미니 필터는 하나 이상의 I/O 작업에 대한 사전 작업(PFLT_PRE_OPERATION_CALLBACK) 및 사후 작업(PFLT_POST_OPERATION_CALLBACK) 콜백 루틴을 등록합니다. 필터 관리자는 이러한 콜백 루틴 중 하나를 호출할 때 콜백 데이터(FLT_CALLBACK_DATA) 구조를 첫 번째 매개 변수로 전달합니다. 이 구조체는 I/O 작업을 나타냅니다.
미니 필터의 사전 작업 또는 사후 작업 콜백 루틴은 스레드 및 RequestorMode 멤버를 제외하고 콜백 데이터 구조의 내용을 수정할 수 있습니다. 이 경우 IoStatus 멤버의 내용도 수정하지 않는 한 FltSetCallbackDataDirty호출해야 합니다. 그렇지 않으면 수정된 값이 무시됩니다.
미니 필터는 FltReadFile 같은 지원 루틴을 호출하거나 FltAllocateCallbackData 호출하여 콜백 데이터 구조를 할당하여 I/O 작업을 시작할 수 있습니다. 구조체의 I/O 매개 변수를 초기화하고 구조를 fltPerformSynchronousIo또는 FltPerformAsynchronousIo전달합니다.
미니 필터 시작 I/O 작업은 호출 인스턴스 아래에 연결된 미니 필터 인스턴스와 파일 시스템으로만 전송됩니다. 지정된 인스턴스 위에 연결된 미니 필터는 I/O 작업을 받지 않습니다.
미니 필터는 IRP 기반 I/O 작업만 시작할 수 있습니다. 빠른 I/O 또는 FSFilter(파일 시스템 필터) 콜백 작업을 시작할 수 없습니다.
요구 사항
요구 | 값 |
---|---|
헤더 | fltkernel.h(Fltkernel.h 포함) |