共用方式為


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 回呼數據結構代表 I/O 要求封包 (IRP) 型作業。

注意

只有篩選管理員可以設定下列旗標。

當篩選管理員初始化回呼數據結構時,也可以設定下列旗標。

旗標 意義
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回FLT_POSTOP_FINISHED_PROCESSING的預作業回呼 (PFLT_PRE_OPERATION_CALLBACK) 例程中修改此結構的內容 (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 作業之進程的執行模式,也就是 KernelModeUserMode

備註

迷你篩選會針對一或多個 I/O 作業類型註冊 (PFLT_PRE_OPERATION_CALLBACK) 和後續作業 (PFLT_POST_OPERATION_CALLBACK) 回呼例程。 當篩選管理員呼叫其中一個回呼例程時,它會將回呼數據傳遞 (FLT_CALLBACK_DATA) 結構作為第一個參數。 這個結構代表 I/O 作業。

迷你篩選的前置作業或後續作業回呼例程可以修改回呼數據結構的內容,但 ThreadRequestorMode 成員除外。 如果這樣做,它必須接著呼叫 FltSetCallbackDataDirty,除非它也修改 了 IoStatus 成員的內容。 否則,會忽略修改的值。

迷你篩選程式可以藉由呼叫 FltReadFile 之類的支援例程,或呼叫 FltAllocateCallbackData 來配置回呼數據結構來起始 I/O 作業;初始化結構的 I/O 參數,並將結構傳遞至 FltPerformSynchronousIoFltPerformAsynchronousIo

迷你篩選起始的 I/O 作業只會傳送至連結在呼叫實例下方的迷你篩選實例,以及文件系統。 附加在指定實例上方的迷你篩選器不會收到 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