Compartir a través de


estructura FLT_IO_PARAMETER_BLOCK (fltkernel.h)

La estructura FLT_IO_PARAMETER_BLOCK contiene los parámetros de la operación de E/S representada por una estructura de datos de devolución de llamada FLT_CALLBACK_DATA .

Sintaxis

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

Miembros

IrpFlags

Máscara de bits de marcas que especifican varios aspectos de la operación de E/S. Estas marcas solo se usan para las operaciones basadas en IRP. En la tabla siguiente se muestran los valores de marca.

Valor Significado
IRP_BUFFERED_IO La operación es una operación de E/S almacenada en búfer.
IRP_CLOSE_OPERATION La operación es una operación de limpieza o cierre.
IRP_DEALLOCATE_BUFFER El Administrador de E/S liberará el búfer durante la fase de finalización del IRP.
IRP_INPUT_OPERATION La operación es una operación de entrada.
IRP_NOCACHE La operación es una operación de E/S no almacenada en caché.
IRP_PAGING_IO La operación es una operación de E/S de paginación.
IRP_SYNCHRONOUS_API La operación de E/S es sincrónica.
IRP_SYNCHRONOUS_PAGING_IO La operación es una operación de E/S de paginación sincrónica.
IRP_MOUNT_COMPLETION Se completa un montaje de volumen para la operación.
IRP_CREATE_OPERATION La operación es una operación de creación o apertura.
IRP_READ_OPERATION La operación de E/S es para leer.
IRP_WRITE_OPERATION La operación de E/S es para escribir.
IRP_DEFER_IO_COMPLETION La finalización de E/S de la operación se aplaza.
IRP_ASSOCIATED_IRP La operación está asociada a un IRP maestro.
IRP_OB_QUERY_NAME La operación es una consulta de nombre asincrónica.
IRP_HOLD_DEVICE_QUEUE Reservado.
IRP_UM_DRIVER_INITIATED_IO La operación se originó en un controlador en modo de usuario.

MajorFunction

El código de función principal para la operación de E/S. Los códigos de función principales se usan para las operaciones basadas en IRP, las operaciones rápidas de E/S y las operaciones de devolución de llamada del sistema de archivos (FSFilter). Para obtener más información sobre las operaciones adicionales, consulte FLT_PARAMETERS.

MinorFunction

Código de función secundaria para la operación de E/S. Este miembro es opcional y puede ser NULL. El valor del miembro MajorFunction determina los valores posibles. Para obtener más información sobre los códigos de función menores, consulte FLT_PARAMETERS.

OperationFlags

Máscara de bits de marcas que especifican varios aspectos de la operación de E/S. Estas marcas solo se usan para las operaciones basadas en IRP. El Administrador de filtros copia estas marcas del miembro Flags de la estructura IO_STACK_LOCATION asociada al IRP. En la tabla siguiente se muestran los valores de marca más usados.

Valor Significado
SL_CASE_SENSITIVE Se usa para IRP_MJ_CREATE. Si se establece esta marca, las comparaciones de nombres de archivo deben distinguir entre mayúsculas y minúsculas.
SL_EXCLUSIVE_LOCK Se usa para IRP_MJ_LOCK_CONTROL. Si se establece esta marca, se solicita un bloqueo de intervalo de bytes exclusivo. De lo contrario, se solicita un bloqueo compartido.
SL_FAIL_IMMEDIATELY Se usa para IRP_MJ_LOCK_CONTROL. Si se establece esta marca, se producirá un error en la solicitud de bloqueo si no se puede conceder inmediatamente.
SL_FORCE_ACCESS_CHECK Se usa para IRP_MJ_CREATE. Si se establece esta marca, se deben realizar comprobaciones de acceso incluso si el valor del miembro RequestorMode del IRP es KernelMode.
SL_FORCE_DIRECT_WRITE Se usa para IRP_MJ_WRITE y IOCTL_DISK_COPY_DATA. Si se establece esta marca, los controladores en modo kernel pueden escribir en áreas de volumen a las que normalmente se les bloquea la escritura debido a motivos de seguridad. Esta marca se comprueba tanto en la capa del sistema de archivos como en la capa de pila de almacenamiento. La marca SL_FORCE_DIRECT_WRITE está disponible en Windows Vista y versiones posteriores de Windows.
SL_INDEX_SPECIFIED Se usa para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA y IRP_MJ_SET_QUOTA. Si se establece esta marca, el examen de información de directorio, cuota o atributo extendido debe comenzar en la entrada de la lista cuyo índice se especifica.
SL_OPEN_PAGING_FILE Se usa para IRP_MJ_CREATE. Si se establece esta marca, el archivo es un archivo de paginación.
SL_OPEN_TARGET_DIRECTORY Se usa para IRP_MJ_CREATE. Si se establece esta marca, se debe abrir el directorio primario del archivo.
SL_OVERRIDE_VERIFY_VOLUME Se usa para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READ y IRP_MJ_WRITE. Si se establece esta marca, la operación de E/S debe realizarse incluso si la marca de DO_VERIFY_VOLUME está establecida en el objeto de dispositivo del volumen.
SL_RESTART_SCAN Se usa para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA y IRP_MJ_SET_QUOTA. Si se establece esta marca, el examen de la información de directorio, cuota o atributo extendido debe comenzar en la primera entrada del directorio o lista. De lo contrario, el examen debe reanudarse desde el examen anterior.
SL_RETURN_SINGLE_ENTRY Se usa para IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA y IRP_MJ_SET_QUOTA. Si se establece esta marca, el examen de la información de directorio, cuota o atributo extendido debe devolver solo la primera entrada que se encuentra.
SL_WATCH_TREE Se usa para IRP_MJ_DIRECTORY_CONTROL. Si se establece esta marca, también se deben observar todos los subdirectorios de este directorio. De lo contrario, solo se va a ver el directorio en sí.
SL_WRITE_THROUGH Se usa para IRP_MJ_WRITE. Si se establece esta marca, los datos del archivo se deben escribir en el almacenamiento persistente, no solo se escribirán en la memoria caché.

Reserved

Reservado para uso del sistema. No debe usarse.

TargetFileObject

Puntero de objeto de archivo para el archivo o directorio que es el destino de esta operación de E/S.

TargetInstance

Puntero de instancia opaco para el minifiltro que es el destino de esta operación de E/S.

Parameters

Estructura FLT_PARAMETERS que contiene los parámetros de la operación de E/S especificada por los miembros MajorFunction y MinorFunction .

Comentarios

La estructura FLT_IO_PARAMETER_BLOCK contiene los parámetros de la operación de E/S representada por una estructura de datos de devolución de llamada (FLT_CALLBACK_DATA). La estructura de datos de devolución de llamada contiene un puntero a la estructura FLT_IO_PARAMETER_BLOCK en su miembro Iopb .

Un minifiltro recibe un puntero a la estructura de datos de devolución de llamada como parámetro de entrada Data o CallbackData a los siguientes tipos de rutina de devolución de llamada:

Las rutinas de devolución de llamada de preoperación y postoperación de un minifiltro pueden modificar el contenido de la estructura de FLT_IO_PARAMETER_BLOCK para la operación de E/S, excepto para los miembros MajorFunction y Reserved . Si lo hace, debe llamar a FltSetCallbackDataDirty, a menos que también haya modificado el miembro IoStatus de la estructura de datos de devolución de llamada para la operación. De lo contrario, se omiten los valores modificados.

Cuando el Administrador de filtros emite una devolución de llamada de preoperación o postoperación a un minifiltro, FltObjects-FileObject> y TargetFileObject (CallbackData-Iopb-TargetFileObject>>) son inicialmente iguales. Si un minifiltro modifica TargetFileObject o TargetInstance, su llamada posterior a FltSetCallbackDataDirty desde una devolución de llamada de preoperación hará que el Administrador de filtros reemplace FltObjects-FileObjects-FileObjects-Instance>> antes de enviar la operación a filtros inferiores.

Si la rutina de devolución de llamada de preoperación de un minifiltro modifica los parámetros de una operación de E/S, todos los minifiltros debajo de él en la pila de instancias de minifiltro recibirán los parámetros modificados en sus rutinas de devolución de llamada de preoperación y postoperación.

La rutina de devolución de llamada de postoperación de minifiltro no recibe los parámetros modificados, ni por los minifiltros por encima de ese minifiltro en la pila de instancias de minifiltro. En todos los casos, las rutinas de devolución de llamada de preoperación y postoperación de un minifiltro reciben los mismos valores de parámetros de entrada.

Si un minifiltro cambia el valor del miembro TargetInstance , el nuevo valor debe ser un puntero a una instancia del mismo minifiltro a la misma altitud en un volumen diferente. Además, el nuevo objeto de dispositivo del volumen debe tener un tamaño de pila mayor o igual que el del objeto de dispositivo del volumen original.

Para obtener el tamaño de pila de un objeto de dispositivo de volumen, dado un puntero de instancia opaco para una instancia conectada al volumen, haga lo siguiente:

  • Llame a FltGetVolumeFromInstance para obtener el puntero de volumen.
  • Llame a FltGetDeviceObject para obtener un puntero al objeto de dispositivo de volumen. Este puntero se devuelve en el parámetro DeviceObject . El tamaño de la pila del objeto de dispositivo se puede encontrar en DeviceObject-StackSize>.
  • Cuando el puntero de volumen ya no sea necesario, llame a FltObjectDereference para disminuir su recuento de referencias.
  • Cuando el puntero del objeto de dispositivo de volumen ya no sea necesario, llame a ObDereferenceObject para disminuir su recuento de referencias.

Un minifiltro puede cambiar el valor del miembro TargetFileObject . Sin embargo, el nuevo valor debe ser un puntero a un objeto de archivo para un archivo que reside en el mismo volumen que la instancia especificada por el miembro TargetInstance .

Un minifiltro no puede cambiar de forma segura el valor del miembro MajorFunction . En su lugar, debe iniciar una nueva operación de E/S.

Un minifiltro puede iniciar una operación de E/S llamando a una rutina de soporte técnico como FltReadFile o llamando a FltAllocateCallbackData para asignar una estructura de datos de devolución de llamada; inicializando los parámetros de E/S en la estructura de FLT_IO_PARAMETER_BLOCK y pasando la estructura de datos de devolución de llamada a FltPerformSynchronousIo o FltPerformAsynchronousIo.

Nota

Use rutinas de soporte siempre que sea posible al iniciar operaciones de E/S. Un minifiltro debe asignar sus propios datos de devolución de llamada solo si no hay ninguna función de compatibilidad para una operación de E/S determinada.

Requisitos

Requisito Valor
Header fltkernel.h (incluya Fltkernel.h)

Consulte también

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

FLT_PARAMETERS

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_SHUTDOWN

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK