IRP_MJ_FILE_SYSTEM_CONTROL工会的FLT_PARAMETERS

IRP_MJ_FILE_SYSTEM_CONTROL操作FLT_IO_PARAMETER_BLOCK结构的MajorFunction 字段时使用的联合组件。

语法

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      PVPB           Vpb;
      PDEVICE_OBJECT DeviceObject;
    } VerifyVolume;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
    } Common;
    struct {
      ULONG                    OutputBufferLength;
      ULONG POINTER_ALIGNMENT  InputBufferLength;
      ULONG POINTER_ALIGNMENT  FsControlCode;
      PVOID                    InputBuffer;
      PVOID                    OutputBuffer;
      PMDL                     OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
  } FileSystemControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

成员

  • FileSystemControl:包含以下成员的结构。

  • VerifyVolume:用于IRP_MN_VERIFY_VOLUME操作的联合组件。

  • Vpb:指向要验证卷的卷参数块 (VPB) 的指针。

  • DeviceObject:指向要验证卷的设备对象的指针。

  • 通用:用于IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST操作的所有缓冲方法的联合组件。

  • Common.OutputBufferLength非.OutputBuffer 或 Direct.OutputBuffer 成员指向的缓冲区的长度 以字节为单位)。

  • Common.InputBufferLength非.InputBuffer、Buffered.SystemBufferDirect.InputSystemBuffer 成员指向的缓冲区的长度(以字节为单位)。

  • Common.FsControlCode:要传递给目标设备的文件系统、文件系统筛选器或微筛选器驱动程序的 FSCTL 函数代码。

有关 IOCTL 和 FSCTL 请求的详细信息,请参阅内核模式体系结构指南中的使用 I/O 控制代码和Microsoft Windows SDK文档中的“设备输入和输出控制代码”。 (此资源可能在某些语言和国家/地区不可用。)

  • 两者都不是:METHOD_NEITHER缓冲方法时,用于IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST操作的联合组件。 有关缓冲方法的详细信息,请参阅 定义 I/O 控制代码

  • 不是。InputBuffer:操作的原始请求者提供的输入缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不会验证这些地址。 为了确保用户空间地址有效,微筛选器必须使用 ProbeForReadProbeForWriteMmProbeAndLockPages 等例程,将所有缓冲区引用括在 try/除块之外 。 有关详细信息,请参阅在引用 User-Space 地址中使用非缓冲 I/O 和直接 I/O 和错误。

  • 不是。OutputBuffer:操作的原始请求者提供的输出缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不会验证这些地址。 为了确保用户空间地址有效,微筛选器必须使用 ProbeForReadProbeForWriteMmProbeAndLockPages 等例程,将所有缓冲区引用括在 try/除块之外 。 有关详细信息,请参阅在引用 User-Space 地址中使用非缓冲 I/O 和直接 I/O 和错误。 既不可选,OutputBuffer 也不 为可选,如果在 Noneer.OutputMdlAddress 中提供了 MDL,则可以为 NULL。 请参阅备注

  • None.OutputMdlAddress:内存描述符列表的地址 (MDL) ,用于描述 Noneer.OutputBuffer 成员指向的缓冲区。 此成员是可选的,如果在“不”.OutputBuffer 中提供了缓冲区,则可以为 NULL

  • 缓冲:METHOD_BUFFERED缓冲方法时,用于IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST操作的联合组件。 有关缓冲方法的详细信息,请参阅 定义 I/O 控制代码

  • Buffered.SystemBuffer:系统为操作分配的缓冲区的地址。 在METHOD_BUFFERED I/O 中,此缓冲区用于输入和输出。 有关详细信息,请参阅 访问数据缓冲区的方法

  • 直接:METHOD_IN_DIRECT或METHOD_OUT_DIRECT缓冲方法时,用于IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST操作的联合组件。 有关缓冲方法的详细信息,请参阅内核模式体系结构指南中的定义 I/O 控制代码

  • Direct.InputSystemBuffer:操作的输入缓冲区的地址。 此缓冲区由操作系统锁定,以便从内核模式进行安全访问。 有关详细信息,请参阅 访问数据缓冲区的方法

  • Direct.OutputBuffer:操作的原始请求者提供的输出缓冲区的用户模式虚拟地址。 在直接 I/O 中,与 METHOD_NEITHER I/O 不同,操作系统会锁定此缓冲区,以便从内核模式进行安全访问,只要微筛选器与 I/O 操作的原始请求者位于同一进程上下文中。 (否则,它必须调用 MmGetSystemAddressForMdlSafeOutputMdlAddress 成员指向的 MDL 获取系统地址。) 有关详细信息,请参阅 使用直接 I/O直接 I/O 中的错误

  • Direct.OutputMdlAddress:内存描述符列表 (描述 Direct.OutputBuffer 成员指向的缓冲区的 MDL) 的地址。 此成员是必需的,不能为 NULL

注解

IRP_MJ_FILE_SYSTEM_CONTROL 操作的FLT_PARAMETERS结构包含由回调数据表示的文件系统-control-information 操作的参数 (FLT_CALLBACK_DATA) 结构。 它包含在 FLT_IO_PARAMETER_BLOCK 结构中。

如果同时提供了 一个 Noneer.OutputBufferNoneer.MdlAddress 缓冲区,则建议微筛选器使用 MDL。

如果微筛选器更改 了 Neither.MdlAddress 的值,则在其后操作回调之后,筛选器管理器将释放当前存储在 Noneer.MdlAddress 中的 MDL ,并还原上一个 Noneer.MdlAddress 值。

IRP_MJ_FILE_SYSTEM_CONTROL是基于 IRP 的操作。

要求

要求类型 要求
标头 Fltkernel.h (包括 Fltkernel.h)

另请参阅

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltFsControlFile

IoBuildAsynchronousFsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile