FLT_PARAMETERS联合IRP_MJ_DEVICE_CONTROL IRP_MJ_INTERNAL_DEVICE_CONTROL联合

联合组件,用于操作FLT_IO_PARAMETER_BLOCK的 MajorFunction 字段IRP_MJ_DEVICE_CONTROL或IRP_MJ_INTERNAL_DEVICE_CONTROL

语法

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
    } Common;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputBuffer;
      PVOID                   OutputBuffer;
    } FastIo;
  } DeviceIoControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

成员

DeviceIoControl
通用
用于所有缓冲方法的 Union 组件。

OutputBufferLength
Neither.OutputBufferDirect.OutputBufferFastIo.OutputBuffer 成员指向的缓冲区的长度(以字节为单位)。

InputBufferLength
Neither.InputBufferBuffered.SystemBufferDirect.InputSystemBufferFastIo.InputBuffer 成员指向的缓冲区的长度(以字节为单位)。

IoControlCode
要传递给目标设备的设备驱动程序的 IOCTL 函数代码。

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

两者均未选中
在缓冲方法被调用时所使用的联合METHOD_NEITHER。 有关缓冲方法详细信息,请参阅内核模式体系结构指南中的 定义 I/O控制代码

InputBuffer
操作的原始请求者提供的输入缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不验证这些地址。 为了确保用户空间地址有效,微筛选器必须使用 ProbeForReadProbeForWriteFltLockUserBuffer 等例程,将所有缓冲区引用括在 try/except 块中。 有关详细信息,请参阅内核模式体系结构指南中的使用非缓冲和直接 I/O 和User-Space引用地址中的错误。 (此资源可能在某些语言和国家/地区中不可用。)

OutputBuffer
操作的原始请求者提供的输出缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不验证这些地址。 为了确保用户空间地址有效,微筛选器必须使用 ProbeForReadProbeForWriteFltLockUserBuffer 等例程,将所有缓冲区引用括在 try/except 块中。 有关详细信息,请参阅内核模式体系结构指南中的使用非缓冲和直接 I/O 和User-Space引用地址中的错误

OutputMdlAddress
内存描述符列表的地址 (MDL) 描述 Neither.OutputBuffer 成员指向的缓冲区。 此成员是可选的,可以是 NULL

缓冲
在缓冲方法被调用时所使用的联合METHOD_BUFFERED。 有关缓冲方法详细信息,请参阅内核模式体系结构指南中的 定义 I/O控制代码。 (此资源可能在某些语言和国家/地区中不可用。)

SystemBuffer
为操作分配的系统缓冲区的地址。 在METHOD_BUFFERED I/O 中,此缓冲区用于输入和输出。 有关详细信息,请参阅 内核模式 体系结构指南中用于访问数据 缓冲区的方法。 (此资源可能在某些语言和国家/地区中不可用。)

直接
在缓冲方法被调用或METHOD_IN_DIRECT时METHOD_OUT_DIRECT。 有关缓冲方法详细信息,请参阅内核模式体系结构指南中的 定义 I/O控制代码。 (此资源可能在某些语言和国家/地区中不可用。)

InputSystemBuffer
操作输入缓冲区的地址。 此缓冲区被操作系统锁定,因此可以安全地从内核模式访问。 有关详细信息,请参阅 内核模式 体系结构指南中用于访问数据 缓冲区的方法。 (此资源可能在某些语言和国家/地区中不可用。)

OutputBuffer
操作的原始请求者提供的输出缓冲区的用户模式虚拟地址。 在直接 I/O 中,与 METHOD_NEITHER I/O 不同,操作系统会锁定此缓冲区,以便从内核模式安全访问,只要微筛选器与 I/O 操作的原始请求者位于同一进程上下文中。 (否则,它必须调用 MmGetSystemAddressForMdlSafe ,从 OutputMdlAddress 成员指向的内存描述符列表 (MDL) 获取系统) 有关详细信息,请参阅内核模式体系结构指南中的在直接 I/O 中使用直接 I/O 和错误。 (此资源可能在某些语言和国家/地区中不可用。)

OutputMdlAddress
描述 Direct.OutputBuffer 成员指向的缓冲区的 MDL 的地址。 此成员是必需的,不能为 NULL

FastIo
联合组件 在 FLT_CALLBACK_DATA 结构 表示快速 I/O IRP_MJ_DEVICE_CONTROL组件。

InputBuffer
操作的原始请求者提供的输入缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不验证这些地址。 为了确保用户空间地址有效,微筛选器必须使用 ProbeForReadProbeForWriteFltLockUserBuffer 等例程,将所有缓冲区引用括在 try/except 块中。 有关详细信息,请参阅内核 模式体系结构 指南User-Space引用地址 中的错误。 (此资源可能在某些语言和国家/地区中不可用。)

OutputBuffer
操作的原始请求者提供的输出缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不验证这些地址。 为了确保用户空间地址有效,微筛选器必须使用 ProbeForReadProbeForWriteFltLockUserBuffer 等例程,将所有缓冲区引用括在 try/except 块中。 有关详细信息,请参阅内核 模式体系结构 指南User-Space引用地址 中的错误。 (此资源可能在某些语言和国家/地区中不可用。)

备注

IRP_MJ_DEVICE_CONTROL IRP_MJ_INTERNAL_DEVICE_CONTROL 运算的 FLT_PARAMETERS 结构包含回调数据 (FLT_CALLBACK_DATA) 结构表示的基于 IRP 的设备 I/O 控制信息操作的参数。 它包含在 一个FLT_IO_PARAMETER_BLOCK 结构中。

IRP_MJ_DEVICE_CONTROL可以是基于 IRP 的操作或快速 I/O 操作。

IRP_MJ_INTERNAL_DEVICE_CONTROL是基于 IRP 的 I/O 操作。

要求

标头

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

FltDeviceIoControlFile

FltLockUserBuffer

IoBuildDeviceIoControlRequest

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwDeviceIoControlFile