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作的进程的执行模式,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