IRP_MJ_CLEANUP (filtros FS y FS)

Cuándo se envió

La recepción de la solicitud de IRP_MJ_CLEANUP indica que el recuento de referencias de identificador en un objeto de archivo ha alcanzado cero. (En otras palabras, se han cerrado todos los identificadores del objeto de archivo). A menudo se envía cuando una aplicación en modo de usuario ha llamado a la función CloseHandle de Win32 (o cuando un controlador en modo kernel ha llamado ZwClose) en el último identificador pendiente a un objeto de archivo.

Es importante tener en cuenta que es posible que el objeto de archivo se siga usando cuando se hayan cerrado todos los identificadores de un objeto de archivo. Los componentes del sistema, como el Administrador de caché y el Administrador de memoria, pueden contener referencias pendientes al objeto de archivo. Estos componentes todavía pueden leer o escribir desde un archivo, incluso después de recibir una solicitud de IRP_MJ_CLEANUP.

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.

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

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 completar el IRP.

De lo contrario, el controlador de filtro debe pasar el IRP al controlador siguiente inferior de la pila después de realizar cualquier procesamiento necesario.

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 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 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, los controladores de filtro deben esperar recibir solicitudes de IRP_MJ_CLOSE para objetos de archivo no vistos previamente.

Parámetros

Un sistema de archivos o un controlador de filtro heredado llama a IoGetCurrentIrpStackLocation con el IRP especificado para obtener un puntero a su propia ubicación de pila en irP, que se muestra en la siguiente lista 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 pila de IRP en el procesamiento de una solicitud de limpieza.

  • DeviceObject

    Puntero al objeto de dispositivo de destino.

  • Irp-Flags>

    Las marcas siguientes se establecen 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_CLEANUP.

Consulte también

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLEANUP (referencia del kernel de WDK)

IRP_MJ_CLOSE

IRP_MJ_CREATE

ZwClose