Share via


FLT_PARAMETERS para IRP_MJ_DEVICE_CONTROL y unión IRP_MJ_INTERNAL_DEVICE_CONTROL

Componente de unión que se usa cuando el campo MajorFunction de la estructura de FLT_IO_PARAMETER_BLOCK para la operación se IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL.

Sintaxis

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;

Miembros

  • Común: componente de unión usado para todos los métodos de almacenamiento en búfer (Ninguno, Almacenado en búfer y FastIo).

  • OutputBufferLength: longitud, en bytes, del búfer al que apunta el miembro Ni.OutputBuffer, Direct.OutputBuffer o FastIo.OutputBuffer .

  • InputBufferLength: longitud, en bytes, del búfer al que apunta el miembro Ni.InputBuffer, Buffered.SystemBuffer, Direct.InputSystemBuffer o FastIo.InputBuffer .

  • IoControlCode: código de función IOCTL que se pasará al controlador de dispositivo para el dispositivo de destino. Para obtener información detallada sobre las solicitudes IOCTL, consulte Uso de códigos de control de E/S y "Códigos de control de entrada y salida de dispositivo" en la documentación de Microsoft Windows SDK. (Es posible que este recurso no esté disponible en algunos idiomas y países).

  • Ninguno: componente de unión que se usa al METHOD_NEITHER el método de almacenamiento en búfer. Para obtener más información sobre los métodos de almacenamiento en búfer, vea Definición de códigos de control de E /S en la Guía de arquitectura del modo kernel.

  • Ni.InputBuffer: dirección virtual en modo de usuario del búfer de entrada que proporcionó el solicitante original de la operación. El Administrador de E/S y el Administrador de filtros no validan estas direcciones. Para asegurarse de que las direcciones de espacio de usuario son válidas, el minifiltro debe usar rutinas como ProbeForRead, ProbeForWrite y FltLockUserBuffer, encerrando todas las referencias de búfer en bloques try/except . Para obtener más información, vea Usar ni E/S ni E/S directa nierrores en hacer referencia a direcciones de User-Space.

  • Ni.OutputBuffer: dirección virtual en modo de usuario del búfer de salida que proporcionó el solicitante original de la operación. El Administrador de E/S y el Administrador de filtros no validan estas direcciones. Para asegurarse de que las direcciones de espacio de usuario son válidas, el minifiltro debe usar rutinas como ProbeForRead, ProbeForWrite y FltLockUserBuffer, encerrando todas las referencias de búfer en bloques try/except . Para obtener más información, vea Usar ni E/S almacenados en búfer nierrores directos en Hacer referencia a User-Space direcciones en la Guía de arquitectura del modo kernel.

  • Neither.OutputMdlAddress: dirección de una lista de descriptores de memoria (MDL) que describe el búfer al que apunta el miembro Neither.OutputBuffer . Este miembro es opcional y puede ser NULL.

  • Almacenado en búfer: componente de unión que se usa cuando se METHOD_BUFFERED el método de almacenamiento en búfer. Para obtener más información sobre los métodos de almacenamiento en búfer, consulte Definición de códigos de control de E/S.

  • Buffered.SystemBuffer: dirección del búfer asignado por el sistema para la operación. En METHOD_BUFFERED E/S, este búfer se usa para la entrada y la salida. Para obtener más información, vea Métodos para acceder a búferes de datos.

  • Directo: componente de unión que se usa cuando el método de almacenamiento en búfer se METHOD_IN_DIRECT o METHOD_OUT_DIRECT. Para obtener más información sobre los métodos de almacenamiento en búfer, consulte Definición de códigos de control de E/S.

  • Direct.InputSystemBuffer: dirección del búfer de entrada para la operación. El sistema operativo bloquea este búfer para que sea seguro acceder desde el modo kernel. Para obtener más información, vea Métodos para acceder a búferes de datos.

  • Direct.OutputBuffer: dirección virtual en modo de usuario del búfer de salida que proporcionó el solicitante original de la operación. En E/S directa, a diferencia de METHOD_NEITHER E/S, el sistema operativo bloquea este búfer para que sea seguro acceder desde el modo kernel, siempre y cuando el minifiltro esté en el mismo contexto de proceso que el solicitante original de la operación de E/S. (De lo contrario, debe llamar a MmGetSystemAddressForMdlSafe para obtener la dirección del sistema de la lista de descriptores de memoria (MDL) a la que apunta el miembro OutputMdlAddress ). Para obtener más información, consulte Uso de E/S directa y errores en E/S directa.

  • Direct.OutputMdlAddress: dirección de una MDL que describe el búfer al que apunta el miembro Direct.OutputBuffer . Este miembro es obligatorio y no puede ser NULL.

  • FastIo: componente de unión que se usa cuando la estructura de FLT_CALLBACK_DATA representa una operación rápida de E/S IRP_MJ_DEVICE_CONTROL.

  • FastIo.InputBuffer: dirección virtual en modo de usuario del búfer de entrada que proporcionó el solicitante original de la operación. El Administrador de E/S y el Administrador de filtros no validan estas direcciones. Para asegurarse de que las direcciones de espacio de usuario son válidas, el minifiltro debe usar rutinas como ProbeForRead, ProbeForWrite y FltLockUserBuffer, encerrando todas las referencias de búfer en bloques try/except . Para obtener más información, vea Errores en hacer referencia a direcciones User-Space.

  • FastIo.OutputBuffer: dirección virtual en modo de usuario del búfer de salida que proporcionó el solicitante original de la operación. El Administrador de E/S y el Administrador de filtros no validan estas direcciones. Para asegurarse de que las direcciones de espacio de usuario son válidas, el minifiltro debe usar rutinas como ProbeForRead, ProbeForWrite y FltLockUserBuffer, encerrando todas las referencias de búfer en bloques try/except . Para obtener más información, vea Errores en hacer referencia a direcciones User-Space.

Comentarios

La estructura de FLT_PARAMETERS para las operaciones de IRP_MJ_DEVICE_CONTROL y IRP_MJ_INTERNAL_DEVICE_CONTROL contiene los parámetros de una operación de información de control de E/S basada en IRP representada por una estructura de datos de devolución de llamada (FLT_CALLBACK_DATA). Se encuentra en una estructura FLT_IO_PARAMETER_BLOCK .

IRP_MJ_DEVICE_CONTROL puede ser una operación basada en IRP o una operación de E/S rápida.

IRP_MJ_INTERNAL_DEVICE_CONTROL es una operación de E/S basada en IRP.

Requisitos

Tipo de requisito Requisito
Encabezado Fltkernel.h (incluya Fltkernel.h)

Consulte también

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