Compartir a través de


IRP_MJ_CLOSE (controladores de filtro y FS)

Cuándo se envió

El Administrador de E/S envía una solicitud de IRP_MJ_CLOSE para indicar que el recuento de referencias de un objeto de archivo ha alcanzado cero, normalmente porque un controlador del sistema de archivos u otro componente de modo kernel ha llamado ObDereferenceObject en el objeto de archivo. Esta solicitud normalmente sigue una solicitud de limpieza. Sin embargo, aunque es posible que la solicitud de cierre no se reciba inmediatamente después de la solicitud de limpieza.

Operación: controladores del sistema de archivos

Si el objeto de dispositivo de destino es el objeto de dispositivo de control del sistema de archivos, el controlador del sistema de archivos debe completar el IRP después de realizar cualquier procesamiento necesario.

De lo contrario, el controlador del sistema de archivos debe procesar la solicitud de cierre.

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

Si el objeto de dispositivo de destino es el objeto de dispositivo de control del controlador de filtro, el controlador de filtro debe hacer lo necesario para finalizar la comunicación con el objeto de dispositivo de control y, a continuación, completar el IRP.

De lo contrario, el controlador de filtro debe realizar cualquier procesamiento necesario y, a continuación, pasar el IRP al controlador siguiente inferior de la pila. El procesamiento podría incluir operaciones como eliminar la información de contexto de objeto por archivo y por archivo que mantiene el filtro.

Los escritores de controladores de filtro del sistema de archivos deben tener en cuenta que IoCreateStreamFileObject hace que se envíe una solicitud de IRP_MJ_CLEANUP a la pila de controladores del sistema de archivos para el volumen. Dado que los sistemas de archivos suelen crear objetos de archivo de secuencia como un efecto secundario de las operaciones distintas de IRP_MJ_CREATE, es difícil que los controladores de filtro detecten de forma confiable la creación de objetos de archivo de secuencia. Por lo tanto, un controlador de filtro debe esperar recibir IRP_MJ_CLEANUP y IRP_MJ_CLOSE solicitudes de objetos de archivo no vistos previamente.

Los escritores de controladores de filtro también deben tener en cuenta que, a diferencia de IoCreateStreamFileObject,IoCreateStreamFileLite no hace que se envíe una solicitud de IRP_MJ_CLEANUP a la pila de controladores del sistema de archivos. Por este motivo, y dado que los sistemas de archivos suelen crear objetos de archivo de secuencia como un efecto secundario de las operaciones que no son IRP_MJ_CREATE, es difícil que los controladores de filtro detecten de forma confiable la creación de objetos de archivo de secuencia. Por lo tanto, los controladores de filtro deben esperar recibir IRP_MJ_CLOSE solicitudes de objetos de archivo no vistos previamente.

Parámetros

Un sistema de archivos o un controlador de filtro llama a IoGetCurrentIrpStackLocation con el IRP especificado para obtener un puntero a su propia ubicación de pila en el IRP, que se muestra en la lista siguiente como IrpSp. (IrP se muestra como Irp). El controlador puede usar la información que se establece en los siguientes miembros del IRP y la ubicación de la pila irP en el procesamiento de una solicitud de cierre.

  • DeviceObject

    Puntero al objeto de dispositivo de destino.

  • Irp-Flags>

    Se establecen las marcas siguientes para esta solicitud:

    • IRP_CLOSE_OPERATION
    • IRP_SYNCHRONOUS_API
  • Irp-IoStatus>

    Puntero a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada.

  • Irp-FileObject>

    Puntero al objeto de archivo asociado a DeviceObject.

    El parámetro Irp-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_CLEANUP y no se debe usar.

  • Irp-MajorFunction>

    Especifica IRP_MJ_CLOSE.

Consulte también

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLOSE (referencia del kernel de WDK)

IRP_MJ_CLEANUP

IRP_MJ_CREATE

ObDereferenceObject