IRP_MJ_FILE_SYSTEM_CONTROL (controladores de filtro y FS)

Cuándo se envió

El Administrador de E/S, otros componentes del sistema operativo y otros controladores en modo kernel envían solicitudes IRP_MJ_FILE_SYSTEM_CONTROL. Se puede enviar, por ejemplo, cuando una aplicación en modo de usuario ha llamado a la función DeviceIoControl de Win32 para enviar una solicitud de control de E/S del sistema de archivos (FSCTL).

Operación: controladores del sistema de archivos

El controlador o reconocedor del sistema de archivos debe comprobar el código de función secundaria para determinar qué operación de control del sistema de archivos se solicita.

Los controladores del sistema de archivos deben controlar los siguientes códigos de función secundarias:

Código Descripción
IRP_MN_KERNEL_CALL Esta solicitud es la misma que IRP_MN_USER_FS_REQUEST (se describe a continuación), excepto que el origen de la solicitud es un componente de kernel de confianza.
IRP_MN_MOUNT_VOLUME Indica una solicitud de montaje de volumen. Si un controlador del sistema de archivos recibe este IRP para un volumen cuyo formato no coincide con el del sistema de archivos, el controlador del sistema de archivos debe devolver STATUS_UNRECOGNIZED_VOLUME.
IRP_MN_USER_FS_REQUEST Indica una solicitud FSCTL, posiblemente en nombre de una aplicación en modo de usuario que haya llamado a la función DeviceIoControl de Microsoft Win32 o en nombre de un componente en modo kernel que haya llamado ZwDeviceIoControlFile o IoBuildDeviceIoControlRequest. Para obtener información detallada sobre las solicitudes FSCTL, consulte "Códigos de control de entrada y salida de dispositivos" en la documentación de Windows SDK.
IRP_MN_VERIFY_VOLUME Indica una solicitud de comprobación de volumen. En el caso de los medios extraíbles, el sistema de archivos debe comprobar el volumen cuando detecta que el medio se ha quitado y devuelto para asegurarse de que sigue siendo el mismo volumen conocido. Si el volumen ha cambiado, el sistema de archivos debe invalidar todos los identificadores pendientes. También debe devolver un error si el sistema de archivos de este nuevo medio ha cambiado. Esta solicitud se usa con más frecuencia para las unidades de disquete.

Los reconocedores del sistema de archivos deben controlar el siguiente código de función secundaria:

Código Descripción
IRP_MN_LOAD_FILE_SYSTEM Indica una solicitud del sistema de archivos de carga.

El controlador o reconocedor del sistema de archivos debe realizar la operación solicitada y, a continuación, completar el IRP.

Operación: Controladores de filtro del sistema de archivos heredados

El controlador de filtro debe pasar este IRP al siguiente controlador inferior de la pila.

Parámetros

Un controlador de filtro o sistema de archivos llama a IoGetCurrentIrpStackLocation para que el IRP especificado obtenga un puntero a su propia ubicación de pila en el IRP. En los parámetros siguientes, Irp apunta a IRP e IrpSp apunta al IO_STACK_LOCATION. El controlador puede usar la información establecida en los siguientes miembros de la ubicación de pila IRP e IRP para procesar una solicitud de control del sistema de archivos:

  • DeviceObject es un puntero al objeto de dispositivo de destino.

  • Irp->AssociatedIrp.SystemBuffer apunta a un búfer de entrada proporcionado por el sistema que se va a pasar al sistema de archivos o al controlador de filtro del sistema de archivos para el volumen de destino. Se usa para METHOD_BUFFERED o METHOD_DIRECT E/S. Si este parámetro es necesario depende del código de control del sistema de archivos específico.

  • Irp->IoStatus apunta a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada.

  • Irp->MdlAddress es la dirección de una lista de descriptores de memoria (MDL) que describe un búfer de salida que se va a pasar al sistema de archivos o al controlador de filtro del sistema de archivos para el volumen de destino. Se usa para METHOD_DIRECT E/S. Si este parámetro es necesario depende del código de control de E/S específico.

  • Irp->UserBuffer apunta a un búfer de salida proporcionado por el autor de la llamada que se pasará al sistema de archivos o al controlador de filtro del sistema de archivos para el volumen de destino. Se usa para E/S de METHOD_BUFFERED o METHOD_NEITHER. Si este parámetro es opcional o necesario depende del código de control de E/S específico.

  • IrpSp->FileObject apunta al objeto de archivo asociado a DeviceObject.

    El parámetro IrpSp-FileObject> contiene un puntero al campo RelatedFileObject, que también es una estructura FILE_OBJECT. El campo RelatedFileObject de la estructura FILE_OBJECT no es válido durante el procesamiento de IRP_MJ_FILE_SYSTEM_CONTROL y no se debe usar.

  • IrpSp->Las marcas se pueden establecer en SL_ALLOW_RAW_MOUNT para IRP_MN_VERIFY_VOLUME.

  • IrpSp->MajorFunction se establece en IRP_MJ_FILE_SYSTEM_CONTROL.

  • IrpSp->MinorFunction se puede establecer en uno de los valores siguientes.

    • IRP_MN_KERNEL_CALL
    • IRP_MN_LOAD_FILE_SYSTEM
    • IRP_MN_MOUNT_VOLUME
    • IRP_MN_USER_FS_REQUEST
    • IRP_MN_VERIFY_VOLUME
  • IrpSp->Parameters.FileSystemControl.FsControlCode es el código de función FSCTL que se va a pasar al sistema de archivos o al controlador de filtro del sistema de archivos para el volumen de destino. Solo para su uso con IRP_MN_USER_FS_REQUEST.

    Para obtener información detallada sobre las solicitudes IOCTL y FSCTL, consulte Uso de códigos de control de E/ S y "Códigos de control de entrada y salida de dispositivos" en la documentación de Windows SDK.

  • IrpSp->Parameters.FileSystemControl.InputBufferLength es el tamaño en bytes del búfer al que apunta Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.FileSystemControl.OutputBufferLength es el tamaño en bytes del búfer al que apunta Irp-UserBuffer>.

  • IrpSp->Parameters.FileSystemControl.Type3InputBuffer es el búfer de entrada para las solicitudes en modo kernel mediante METHOD_NEITHER.

  • IrpSp->Parameters.MountVolume.DeviceObject apunta al objeto de dispositivo para el dispositivo real en el que se va a montar el volumen. Los controladores de filtro del sistema de archivos no deben usar este parámetro.

  • IrpSp->Parameters.MountVolume.Vpb apunta al bloque de parámetros de volumen (VPB) del volumen que se va a montar. Los sistemas de archivos que admiten medios extraíbles pueden sustituir un VPB usado anteriormente por el pasado en este parámetro. En estos sistemas de archivos, una vez montado el volumen, este puntero ya no se puede suponer que es válido. Los controladores de filtro del sistema de archivos que filtran estos sistemas de archivos deben usar este parámetro de la siguiente manera: El filtro debe guardar el valor de IrpSp-Parameters.MountVolume.Vpb-RealDevice>> antes de enviar el IRP a controladores de nivel inferior. Una vez montado correctamente el volumen, el filtro puede usar este puntero al objeto de dispositivo de almacenamiento para obtener el puntero VPB correcto.

  • IrpSp->Parameters.VerifyVolume.DeviceObject apunta al objeto de dispositivo para que se compruebe el volumen.

  • IrpSp->Parameters.VerifyVolume.Vpb apunta al VPB para que se compruebe el volumen.

Consulte también

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoGetCurrentIrpStackLocation

IRP

ZwDeviceIoControlFile