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 结构。 微筛选器只能在操作前回调 (PFLT_PRE_OPERATION_CALLBACK) 即将返回FLT_PREOP_COMPLETE的例程或操作后回调 (PFLT_POST_OPERATION_CALLBACK) 例程中修改此结构的内容FLT_POSTOP_FINISHED_PROCESSING。 否则,此结构的内容通常由筛选器管理器设置。
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 )的执行 模式。
注解
微筛选器 (PFLT_PRE_OPERATION_CALLBACK ) 和操作后 (PFLT_POST_OPERATION_CALLBACK 一个或多个 I/O 操作类型的回调例程) PFLT_POST_OPERATION_CALLBACK操作前 (。 当筛选器管理器调用其中一个回调例程时,它会将回调数据 (FLT_CALLBACK_DATA) 结构作为第一个参数传递。 此结构表示 I/O 操作。
微筛选器的操作前或操作后回调例程可以修改回调数据结构的内容, 线程 和 RequestorMode 成员除外。 如果存在,则必须调用 FltSetCallbackDataDirty,除非它还修改了 IoStatus 成员的内容。 否则,将忽略修改的值。
微筛选器可以通过调用支持例程(如 FltReadFile )或通过调用 FltAllocateCallbackData 来分配回调数据结构来启动 I/O 操作;初始化结构的 I/O 参数,并将结构传递给 FltPerformSynchronousIo 或 FltPerformAsynchronousIo。
微筛选器启动的 I/O 操作仅发送到附加到调用实例下方的微筛选器实例和文件系统。 附加到指定实例上方的微筛选器不会接收 I/O 操作。
微筛选器只能启动基于 IRP 的 I/O 操作。 它们无法启动快速 I/O 或文件系统筛选器 (FSFilter) 回调操作。
要求
要求 | 值 |
---|---|
Header | fltkernel.h (包括 Fltkernel.h) |