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 sin almacenamiento 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 | Se aplaza la finalización de E/S de la operación. |
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
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 de E/S rápidas y las operaciones de devolución de llamada del sistema de archivos (FSFilter). Para obtener más información sobre las operaciones adicionales, vea 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, vea 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 de IO_STACK_LOCATION asociada alIRP de. 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 mayúsculas de 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, las comprobaciones de acceso deben realizarse incluso si el valor del miembro RequestorMode 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 impide escribir 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_EAy IRP_MJ_SET_QUOTA. Si se establece esta marca, la 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_READy 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_EAy IRP_MJ_SET_QUOTA. Si se establece esta marca, 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_EAy IRP_MJ_SET_QUOTA. Si se establece esta marca, 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 deben escribirse en el almacenamiento persistente, no solo se escribirán en la memoria caché. |
Reserved
Reservado para uso del sistema. No use.
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 el MajorFunction de y miembros minorFunction.
Observaciones
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 de su miembro Iopb.
Un minifiltro recibe un puntero a la estructura de datos de devolución de llamada como Data o CallbackData parámetro de entrada 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 la majorFunction y miembros de reservados. 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 preoperación La devolución de llamada detion hará que el Administrador de filtros reemplace FltObjects->fileObject y FltObjects->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 del minifiltro no recibe los parámetros modificados, ni por ningún minifiltro 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ámetro 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 objeto de dispositivo del nuevo 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 asociada 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 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 de 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 de. 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; inicializar los parámetros de E/S en la estructura de FLT_IO_PARAMETER_BLOCK y pasar 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 |
---|---|
encabezado de | 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