다음을 통해 공유


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 작업을 나타냅니다.

미니필터의 사전 작업 또는 사후 작업 콜백 루틴은 ThreadRequestorMode 멤버를 제외하고 콜백 데이터 구조의 내용을 수정할 수 있습니다. 이 경우 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 포함)

추가 정보

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_IS_SYSTEM_BUFFER

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FLT_TAG_DATA_BUFFER

FltAllocateCallbackData

FltFreeCallbackData

FltPerformAsynchronousIo

FltPerformSynchronousIo

FltReadFile

FltReissueSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IO_STACK_LOCATION

IO_STATUS_BLOCK

IRP

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK