FLT_PARAMETERS para la unión de IRP_MJ_FILE_SYSTEM_CONTROL

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

Sintaxis

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;

Miembros

  • FileSystemControl: estructura que contiene los siguientes miembros.

  • VerifyVolume: componente union usado para las operaciones de IRP_MN_VERIFY_VOLUME.

  • Vpb: puntero al bloque de parámetros de volumen (VPB) para que se compruebe el volumen.

  • DeviceObject: puntero al objeto de dispositivo para que se compruebe el volumen.

  • Común: componente de unión usado para todos los métodos de almacenamiento en búfer para IRP_MN_KERNEL_CALL y operaciones de IRP_MN_USER_FS_REQUEST.

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

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

  • Common.FsControlCode: código de función FSCTL que se pasará al sistema de archivos, al filtro del sistema de archivos o al controlador de minifiltro para el dispositivo de destino.

Para obtener información detallada sobre las solicitudes IOCTL y FSCTL, consulte Uso de códigos de control de E/S en la Guía de arquitectura del modo kernel 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 usado para IRP_MN_KERNEL_CALL y operaciones de IRP_MN_USER_FS_REQUEST cuando el método de almacenamiento en búfer se METHOD_NEITHER. 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.

  • 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 MmProbeAndLockPages, 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 MmProbeAndLockPages, 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 es opcional y puede ser NULL si se proporciona una MDL en Neither.OutputMdlAddress. Vea Comentarios.

  • 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 si se proporciona un búfer en Neither.OutputBuffer.

  • Almacenado en búfer: componente de unión usado para IRP_MN_KERNEL_CALL y operaciones de IRP_MN_USER_FS_REQUEST 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 usado para IRP_MN_KERNEL_CALL y operaciones de IRP_MN_USER_FS_REQUEST 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, vea Definición de códigos de control de E /S en la Guía de arquitectura del modo kernel.

  • 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 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 lista de descriptores de memoria (MDL) que describe el búfer al que apunta el miembro Direct.OutputBuffer . Este miembro es obligatorio y no puede ser NULL.

Comentarios

La estructura FLT_PARAMETERS para IRP_MJ_FILE_SYSTEM_CONTROL operaciones contiene los parámetros de una operación file-system-control-information representada por una estructura de datos de devolución de llamada (FLT_CALLBACK_DATA). Se encuentra en una estructura FLT_IO_PARAMETER_BLOCK .

Si se proporciona un búfer Neither.OutputBuffer y Neither.MdlAddress , se recomienda que los minifiltros usen MDL.

Si un minifiltro cambia el valor de Neither.MdlAddress, después de su devolución de llamada posterior a la operación, el Administrador de filtros liberará la MDL almacenada actualmente en Neither.MdlAddress y restaurará el valor anterior de Neither.MdlAddress.

IRP_MJ_FILE_SYSTEM_CONTROL es una operación 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

FltFsControlFile

IoBuildAsynchronousFsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile