IRP_MJ_CLEANUP (filtri FS e FS)

Data di invio

La ricezione della richiesta di IRP_MJ_CLEANUP indica che il conteggio dei riferimenti di handle su un oggetto file ha raggiunto zero. In altre parole, tutti gli handle dell'oggetto file sono stati chiusi. Spesso viene inviato quando un'applicazione in modalità utente ha chiamato la funzione CloseHandle Win32 (o quando un driver in modalità kernel ha chiamato ZwClose) nell'ultimo handle in sospeso in un oggetto file.

È importante notare che l'oggetto file potrebbe essere ancora usato quando tutti gli handle di un oggetto file sono stati chiusi. I componenti di sistema, ad esempio Gestione cache e Gestione memoria, potrebbero contenere riferimenti in sospeso all'oggetto file. Questi componenti possono comunque leggere o scrivere da un file, anche dopo la ricezione di una richiesta di IRP_MJ_CLEANUP.

Operazione: Driver di file system

Se l'oggetto dispositivo di destinazione è l'oggetto dispositivo di controllo del file system, il driver del file system deve completare l'IRP.

In caso contrario, il driver del file system deve elaborare la richiesta di pulizia.

Operazione: Driver di filtro del file system legacy

Se l'oggetto dispositivo di destinazione è l'oggetto del dispositivo di controllo del driver di filtro, il driver di filtro deve completare l'IRP.

In caso contrario, il driver di filtro deve passare l'IRP fino al driver inferiore successivo nello stack dopo aver eseguito qualsiasi elaborazione necessaria.

I writer di filtri del file system devono notare che IoCreateStreamFileObject causa l'invio di una richiesta di IRP_MJ_CLEANUP allo stack di driver del file system per il volume. Poiché i file system spesso creano oggetti file di flusso come effetto collaterale delle operazioni diverse da IRP_MJ_CREATE, è difficile che i driver di filtro rilevino in modo affidabile la creazione di oggetti file di flusso. Pertanto, un driver di filtro dovrebbe ricevere IRP_MJ_CLEANUP e IRP_MJ_CLOSE richieste di oggetti file non visualizzati in precedenza.

I writer di driver di filtro devono notare anche che, a differenza di IoCreateStreamFileObjectObject, IoCreateStreamFileObjectLite non causa l'invio di una richiesta di IRP_MJ_CLEANUP allo stack di driver del file system. Per questo motivo, e poiché i file system spesso creano oggetti file di flusso come effetto collaterale delle operazioni diverse da IRP_MJ_CREATE, è difficile che i driver di filtro rilevino in modo affidabile la creazione di oggetti file di flusso. Pertanto, i driver di filtro dovrebbero ricevere IRP_MJ_CLOSE richieste per gli oggetti file non visualizzati in precedenza.

Parametri

Un file system o un driver di filtro legacy chiama IoGetCurrentIrpStackLocation con l'IRP specificato per ottenere un puntatore alla propria posizione dello stack nell'IRP, illustrato nell'elenco seguente come IrpSp. ( L'IRP viene visualizzato come Irp.) Il driver può usare le informazioni impostate nei membri seguenti dell'IRP e del percorso dello stack IRP nell'elaborazione di una richiesta di pulizia.

  • DeviceObject

    Puntatore all'oggetto dispositivo di destinazione.

  • Flag Irp>

    Per questa richiesta sono impostati i flag seguenti:

    • IRP_CLOSE_OPERATION
    • IRP_SYNCHRONOUS_API
  • Irp-IoStatus>

    Puntatore a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e le informazioni sull'operazione richiesta.

  • Irp-FileObject>

    Puntatore all'oggetto file associato a DeviceObject.

    Il parametro Irp-FileObject> contiene un puntatore al campo RelatedFileObject, che è anche una struttura FILE_OBJECT. Il campo RelatedFileObject della struttura FILE_OBJECT non è valido durante l'elaborazione di IRP_MJ_CLEANUP e non deve essere usato.

  • Irp-MajorFunction>

    Specifica IRP_MJ_CLEANUP.

Vedi anche

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLEANUP (Informazioni di riferimento sul kernel WDK)

IRP_MJ_CLOSE

IRP_MJ_CREATE

ZwClose