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) |