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
IO_STATUS_BLOCK 結構,其中包含I/O作業的狀態和資訊。 小型篩選程式只能在即將從中傳回FLT_PREOP_COMPLETE或在作業後回呼 (PFLT_POST_OPERATION_CALLBACK) 例程中傳回FLT_POSTOP_FINISHED_PROCESSING的預作業回呼 (PFLT_PRE_OPERATION_CALLBACK) 例程中修改這個結構的內容。 否則,篩選管理員通常會設定此結構的內容。
TagData
FLT_TAG_DATA_BUFFER 結構的指標,其中包含 I/O 作業的重新分析點數據。 此指標只在建立後路徑中有效。 因此,只有迷你篩選程式的後續作業回呼例程可以變更這個成員的值。 迷你篩選的建立後回呼例程可以變更此成員,以指向不同的 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 成員的內容。 否則,會忽略修改的值。
小型篩選程式可以呼叫支援例程來起始 I/O 作業,例如 FltReadFile,或呼叫 FltAllocateCallbackData 來配置回呼數據結構:初始化結構的 I/O 參數,並將 結構傳遞至 FltPerformSynchronousIo 或 FltPerformAsynchronousIo。
小型篩選起始的 I/O 作業只會傳送至附加在呼叫實例下方的迷你篩選實例,以及傳送至文件系統。 附加在指定實例上方的迷你篩選不會接收 I/O 作業。
迷你篩選只能起始 IRP 型 I/O 作業。 它們無法起始快速 I/O 或文件系統篩選器 (FSFilter) 回呼作業。
要求
要求 | 價值 |
---|---|
標頭 | fltkernel.h (包括 Fltkernel.h) |