FLT_IO_PARAMETER_BLOCK结构(fltkernel.h)

FLT_IO_PARAMETER_BLOCK 结构包含由 FLT_CALLBACK_DATA 回调数据结构表示的 I/O作的参数。

语法

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

成员

IrpFlags

指定 I/O作的各个方面的标志的位掩码。 这些标志仅用于基于 IRP 的作。 下表显示了标志值。

价值 意义
IRP_BUFFERED_IO 该作是缓冲的 I/O作。
IRP_CLOSE_OPERATION 该作是清理或关闭作。
IRP_DEALLOCATE_BUFFER I/O 管理器将在 IRP 的完成阶段释放缓冲区。
IRP_INPUT_OPERATION 该作是输入作。
IRP_NOCACHE 该作是非缓存的 I/O作。
IRP_PAGING_IO 该作是分页 I/O作。
IRP_SYNCHRONOUS_API I/O作是同步的。
IRP_SYNCHRONOUS_PAGING_IO 该作是同步分页 I/O作。
IRP_MOUNT_COMPLETION 为作完成卷装载。
IRP_CREATE_OPERATION 该作是一个创建或打开的作。
IRP_READ_OPERATION I/O作用于读取。
IRP_WRITE_OPERATION I/O作用于写入。
IRP_DEFER_IO_COMPLETION 作的 I/O 完成延迟。
IRP_ASSOCIATED_IRP 该作与主 IRP 相关联。
IRP_OB_QUERY_NAME 该作是异步名称查询。
IRP_HOLD_DEVICE_QUEUE 保留。
IRP_UM_DRIVER_INITIATED_IO 该作源自用户模式驱动程序。

MajorFunction

I/O作的主要函数代码。 主要函数代码用于基于 IRP 的作、快速 I/O作和文件系统 (FSFilter) 回调作。 有关其他作的详细信息,请参阅 FLT_PARAMETERS

MinorFunction

I/O作的次要函数代码。 此成员是可选的,可以 NULLMajorFunction 成员的值决定了可能的值。 有关次要函数代码的详细信息,请参阅 FLT_PARAMETERS

OperationFlags

指定 I/O作的各个方面的标志的位掩码。 这些标志仅用于基于 IRP 的作。 筛选器管理器从与 IRP关联的 IO_STACK_LOCATION 结构 成员 标志复制这些标志。 下表显示了最常用的标志值。

价值 意义
SL_CASE_SENSITIVE 用于 IRP_MJ_CREATE。 如果设置了此标志,则文件名比较应区分大小写。
SL_EXCLUSIVE_LOCK 用于 IRP_MJ_LOCK_CONTROL。 如果设置了此标志,则会请求独占字节范围锁。 否则,请求共享锁。
SL_FAIL_IMMEDIATELY 用于 IRP_MJ_LOCK_CONTROL。 如果设置了此标志,则如果无法立即授予锁定请求,则锁定请求应失败。
SL_FORCE_ACCESS_CHECK 用于 IRP_MJ_CREATE。 如果设置了此标志,则即使 IRP 的 RequestorMode 成员的值 KernelMode,也必须执行访问检查。
SL_FORCE_DIRECT_WRITE 用于IRP_MJ_WRITE和IOCTL_DISK_COPY_DATA。 如果设置了此标志,内核模式驱动程序可以写入卷区域,这些区域通常由于安全原因而被阻止写入。 在文件系统层和存储堆栈层检查此标志。 SL_FORCE_DIRECT_WRITE标志在 Windows Vista 和更高版本的 Windows 中可用。
SL_INDEX_SPECIFIED 用于 IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA。 如果设置了此标志,则目录、配额或扩展属性信息的扫描应从指定索引的列表中的条目开始。
SL_OPEN_PAGING_FILE 用于 IRP_MJ_CREATE。 如果设置了此标志,该文件是分页文件。
SL_OPEN_TARGET_DIRECTORY 用于 IRP_MJ_CREATE。 如果设置了此标志,则应打开文件的父目录。
SL_OVERRIDE_VERIFY_VOLUME 用于 IRP_MJ_DIRECTORY_CONTROLIRP_MJ_READIRP_MJ_WRITE。 如果设置了此标志,则即使对卷的设备对象设置了DO_VERIFY_VOLUME标志,也应执行 I/O作。
SL_RESTART_SCAN 用于 IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA。 如果设置了此标志,则目录、配额或扩展属性信息的扫描应从目录或列表中的第一个条目开始。 否则,应从上一次扫描恢复扫描。
SL_RETURN_SINGLE_ENTRY 用于 IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA。 如果设置了此标志,则目录、配额或扩展属性信息的扫描应仅返回找到的第一个条目。
SL_WATCH_TREE 用于 IRP_MJ_DIRECTORY_CONTROL。 如果设置了此标志,则还应监视此目录的所有子目录。 否则,只监视目录本身。
SL_WRITE_THROUGH 用于 IRP_MJ_WRITE。 如果设置了此标志,则必须将文件数据写入永久性存储,而不仅仅是写入缓存。

Reserved

保留供系统使用。 请勿使用。

TargetFileObject

作为此 I/O作目标的文件或目录的文件对象指针。

TargetInstance

此 I/O作的目标微型筛选器的不透明实例指针。

Parameters

一个 FLT_PARAMETERS 结构,其中包含由 MajorFunctionMinorFunction 成员指定的 I/O作的参数。

言论

FLT_IO_PARAMETER_BLOCK 结构包含由回调数据(FLT_CALLBACK_DATA)结构表示的 I/O作的参数。 回调数据结构包含指向其 Iopb 成员中FLT_IO_PARAMETER_BLOCK结构的指针。

微型筛选器接收指向回调数据结构的指针作为 数据CallbackData 输入参数到以下回调例程类型:

微筛选器的预作和作后回调例程可以修改 I/O作的FLT_IO_PARAMETER_BLOCK结构的内容,除了 MajorFunction保留 成员。 如果这样做,则必须调用 FltSetCallbackDataDirty,除非它还修改了作回调数据结构的 IoStatus 成员。 否则,将忽略修改的值。

当筛选器管理器向微型筛选器发出预作或作后回调时,FltObjects->FileObjectTargetFileObject(CallbackData->Iopb->TargetFileObject)最初相同。 如果微筛选器修改 TargetFileObjectTargetInstance,则随后从 pre 调用 FltSetCallbackDataDirty作回调将导致筛选器管理器在将作发送到较低筛选器之前替换 FltObjects->FileObjectFltObjects ->实例

如果微型筛选器的预作回调例程修改 I/O作的参数,则微型筛选器实例堆栈中下面的所有微筛选器都将在其预作和作后回调例程中接收修改的参数。

修改后的参数不是由微筛选器自己的作后回调例程接收的,也不是由迷你筛选器实例堆栈中上述任何微筛选器接收的。 在所有情况下,微型筛选器的预作和作后回调例程接收相同的输入参数值。

如果微筛选器更改了 TargetInstance 成员的值,则新值必须是指向位于不同卷上相同高度的相同微筛选器实例的指针。 此外,新卷的设备对象必须具有大于或等于原始卷的设备对象的堆栈大小。

若要获取卷设备对象的堆栈大小,给定附加到卷的实例的不透明实例指针,请执行以下作:

  • 调用 FltGetVolumeFromInstance 以获取卷指针。
  • 调用 FltGetDeviceObject 以获取指向卷设备对象的指针。 此指针在 DeviceObject 参数中返回。 可以在 DeviceObject->StackSize中找到设备对象的堆栈大小。
  • 不再需要卷指针时,调用 FltObjectDereference 以递减其引用计数。
  • 不再需要卷设备对象指针时,调用 ObDereferenceObject 以递减其引用计数。

微型筛选器可以更改 TargetFileObject 成员的值。 但是,新值必须是指向位于 TargetInstance 成员所指定的实例所在的同一卷的文件的文件对象的指针。

微型筛选器无法安全地更改 MajorFunction 成员的值。 相反,它必须启动新的 I/O作。

微型筛选器可以通过调用支持例程(例如 FltReadFile),或通过调用 FltAllocateCallbackData 来分配回调数据结构来启动 I/O作;初始化 FLT_IO_PARAMETER_BLOCK 结构中的 I/O 参数,并将回调数据结构传递给 FltPerformSynchronousIoFltPerformAsynchronousIo

注意

在启动 I/O作时尽可能使用支持例程。 仅当特定 I/O作没有支持函数时,微型筛选器才应分配自己的回调数据。

要求

要求 价值
标头 fltkernel.h (包括 Fltkernel.h)

另请参阅

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

FLT_PARAMETERS

  • IRP_MJ_ACQUIRE_FOR_MOD_WRITEFLT_PARAMETERS
  • IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATIONFLT_PARAMETERS
  • IRP_MJ_CREATEFLT_PARAMETERS
  • IRP_MJ_CREATE_MAILSLOTFLT_PARAMETERS
  • IRP_MJ_CREATE_NAMED_PIPEFLT_PARAMETERS
  • IRP_MJ_DEVICE_CONTROLFLT_PARAMETERS
  • IRP_MJ_DIRECTORY_CONTROLFLT_PARAMETERS
  • IRP_MJ_FAST_IO_CHECK_IF_POSSIBLEFLT_PARAMETERS
  • IRP_MJ_FILE_SYSTEM_CONTROLFLT_PARAMETERS
  • IRP_MJ_INTERNAL_DEVICE_CONTROLFLT_PARAMETERS
  • IRP_MJ_LOCK_CONTROLFLT_PARAMETERS
  • IRP_MJ_MDL_READFLT_PARAMETERS
  • IRP_MJ_MDL_READ_COMPLETEFLT_PARAMETERS
  • IRP_MJ_MDL_WRITE_COMPLETEFLT_PARAMETERS
  • IRP_MJ_NETWORK_QUERY_OPENFLT_PARAMETERS
  • IRP_MJ_PNPFLT_PARAMETERS
  • IRP_MJ_PREPARE_MDL_WRITEFLT_PARAMETERS
  • IRP_MJ_QUERY_EAFLT_PARAMETERS
  • IRP_MJ_QUERY_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_QUERY_OPENFLT_PARAMETERS
  • IRP_MJ_QUERY_QUOTAFLT_PARAMETERS
  • IRP_MJ_QUERY_SECURITYFLT_PARAMETERS
  • IRP_MJ_QUERY_VOLUME_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_READFLT_PARAMETERS
  • IRP_MJ_RELEASE_FOR_MOD_WRITEFLT_PARAMETERS
  • FLT_PARAMETERS for IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
  • IRP_MJ_SET_EAFLT_PARAMETERS
  • IRP_MJ_SET_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_SET_QUOTAFLT_PARAMETERS
  • IRP_MJ_SET_SECURITYFLT_PARAMETERS
  • IRP_MJ_SET_VOLUME_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_SYSTEM_CONTROLFLT_PARAMETERS
  • IRP_MJ_VOLUME_MOUNTFLT_PARAMETERS
  • IRP_MJ_WRITEFLT_PARAMETERS

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_SHUTDOWN

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK