IRP_MJ_DEVICE_CONTROL和IRP_MJ_INTERNAL_DEVICE_CONTROL联合FLT_PARAMETERS

的 FLT_IO_PARAMETER_BLOCK 结构的 MajorFunction 字段IRP_MJ_DEVICE_CONTROLIRP_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;

成员

  • 常见:用于所有缓冲方法的联合组件(既不用于缓冲方法,也没有 缓冲FastIo)。

  • OutputBufferLength既不指向.OutputBuffer、Direct.OutputBufferFastIo.OutputBuffer 成员指向的缓冲区的长度(以字节为单位)。

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

  • IoControlCode:要传递给目标设备的设备驱动程序的 IOCTL 函数代码。 有关 IOCTL 请求的详细信息,请参阅 Microsoft Windows SDK 文档中 的“使用 I/O 控制代码 ”和“设备输入和输出控制代码”。 (此资源或许不提供某些语言版本,或在某些国家或地区可能不可用。)

  • 这两者都没有:缓冲方法METHOD_NEITHER时使用的联合组件。 有关缓冲方法的详细信息,请参阅内核模式体系结构指南中的定义 I/O 控制代码

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

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

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

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

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

  • 直接:缓冲方法METHOD_IN_DIRECT或METHOD_OUT_DIRECT时使用的联合组件。 有关缓冲方法的详细信息,请参阅 定义 I/O 控制代码

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

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

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

  • FastIo当FLT_CALLBACK_DATA 结构表示快速 I/O IRP_MJ_DEVICE_CONTROL作时使用的联合组件。

  • FastIo.InputBuffer:作的原始请求者提供的输入缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不会验证这些地址。 为了确保用户空间地址有效,微型筛选器必须使用 ProbeForReadProbeForWriteFltLockUserBuffer 等例程,并将所有缓冲区引用括在 try/except 块中。 有关详细信息,请参阅引用用户空间地址时出错

  • FastIo.OutputBuffer:作的原始请求者提供的输出缓冲区的用户模式虚拟地址。 I/O 管理器和筛选器管理器不会验证这些地址。 为了确保用户空间地址有效,微型筛选器必须使用 ProbeForReadProbeForWriteFltLockUserBuffer 等例程,并将所有缓冲区引用括在 try/except 块中。 有关详细信息,请参阅引用用户空间地址时出错

注解

IRP_MJ_DEVICE_CONTROLIRP_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