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 作業之進程的執行模式,也就是 KernelMode 或 UserMode。
備註
迷你篩選會針對一或多個 I/O 作業類型註冊 (PFLT_PRE_OPERATION_CALLBACK) 和後續作業 (PFLT_POST_OPERATION_CALLBACK) 回呼例程。 當篩選管理員呼叫其中一個回呼例程時,它會將回呼數據傳遞 (FLT_CALLBACK_DATA) 結構作為第一個參數。 這個結構代表 I/O 作業。
迷你篩選的前置作業或後續作業回呼例程可以修改回呼數據結構的內容,但 Thread 和 RequestorMode 成員除外。 如果這樣做,它必須接著呼叫 FltSetCallbackDataDirty,除非它也修改 了 IoStatus 成員的內容。 否則,會忽略修改的值。
迷你篩選程式可以藉由呼叫 FltReadFile 之類的支援例程,或呼叫 FltAllocateCallbackData 來配置回呼數據結構來起始 I/O 作業;初始化結構的 I/O 參數,並將結構傳遞至 FltPerformSynchronousIo 或 FltPerformAsynchronousIo。
迷你篩選起始的 I/O 作業只會傳送至連結在呼叫實例下方的迷你篩選實例,以及文件系統。 附加在指定實例上方的迷你篩選器不會收到 I/O 作業。
迷你篩選程式只能起始 IRP 型 I/O 作業。 它們無法起始快速 I/O 或文件系統篩選 (FSFilter) 回呼作業。
規格需求
需求 | 值 |
---|---|
標頭 | fltkernel.h (包含 Fltkernel.h) |