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:
- PFLT_POST_OPERATION_CALLBACK
- PFLT_PRE_OPERATION_CALLBACK
- PFLT_COMPLETED_ASYNC_IO_CALLBACK
- PFLT_GENERATE_FILE_NAME
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_PARAMETERS para IRP_MJ_ACQUIRE_FOR_MOD_WRITE
- FLT_PARAMETERS para IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS para IRP_MJ_CREATE
- FLT_PARAMETERS para IRP_MJ_CREATE_MAILSLOT
- FLT_PARAMETERS para IRP_MJ_CREATE_NAMED_PIPE
- FLT_PARAMETERS para IRP_MJ_DEVICE_CONTROL
- FLT_PARAMETERS para IRP_MJ_DIRECTORY_CONTROL
- FLT_PARAMETERS para IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE
- FLT_PARAMETERS para IRP_MJ_FILE_SYSTEM_CONTROL
- FLT_PARAMETERS para IRP_MJ_INTERNAL_DEVICE_CONTROL
- FLT_PARAMETERS para IRP_MJ_LOCK_CONTROL
- FLT_PARAMETERS para IRP_MJ_MDL_READ
- FLT_PARAMETERS para IRP_MJ_MDL_READ_COMPLETE
- FLT_PARAMETERS para IRP_MJ_MDL_WRITE_COMPLETE
- FLT_PARAMETERS para IRP_MJ_NETWORK_QUERY_OPEN
- FLT_PARAMETERS para IRP_MJ_PNP
- FLT_PARAMETERS para IRP_MJ_PREPARE_MDL_WRITE
- FLT_PARAMETERS para IRP_MJ_QUERY_EA
- FLT_PARAMETERS para IRP_MJ_QUERY_INFORMATION
- FLT_PARAMETERS para IRP_MJ_QUERY_OPEN
- FLT_PARAMETERS para IRP_MJ_QUERY_QUOTA
- FLT_PARAMETERS para IRP_MJ_QUERY_SECURITY
- FLT_PARAMETERS para IRP_MJ_QUERY_VOLUME_INFORMATION
- FLT_PARAMETERS para IRP_MJ_READ
- FLT_PARAMETERS para IRP_MJ_RELEASE_FOR_MOD_WRITE
- FLT_PARAMETERS para IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS para IRP_MJ_SET_EA
- FLT_PARAMETERS para IRP_MJ_SET_INFORMATION
- FLT_PARAMETERS para IRP_MJ_SET_QUOTA
- FLT_PARAMETERS para IRP_MJ_SET_SECURITY
- FLT_PARAMETERS para IRP_MJ_SET_VOLUME_INFORMATION
- FLT_PARAMETERS para IRP_MJ_SYSTEM_CONTROL
- FLT_PARAMETERS para IRP_MJ_VOLUME_MOUNT
- FLT_PARAMETERS para IRP_MJ_WRITE