IRP_MJ_CLOSE (driver FS e filtro)

Data di invio

Gestione I/O invia una richiesta di IRP_MJ_CLOSE per indicare che il conteggio dei riferimenti su un oggetto file ha raggiunto zero, in genere perché un driver del file system o un altro componente in modalità kernel ha chiamato ObDereferenceObject nell'oggetto file. Questa richiesta segue normalmente una richiesta di pulizia. Tuttavia, anche se la richiesta di chiusura potrebbe non essere ricevuta immediatamente dopo la richiesta di pulizia.

Operazione: driver del 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 dopo aver eseguito l'elaborazione necessaria.

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

Operazione: driver di filtro del file system legacy

Se l'oggetto dispositivo di destinazione è l'oggetto dispositivo di controllo del driver di filtro, il driver di filtro deve eseguire le operazioni necessarie per terminare la comunicazione con l'oggetto dispositivo di controllo e quindi completare l'IRP.

In caso contrario, il driver di filtro deve eseguire qualsiasi elaborazione necessaria e quindi passare l'IRP al driver inferiore successivo nello stack. L'elaborazione può includere operazioni quali l'eliminazione delle informazioni sul contesto per file e per oggetto file che il filtro gestisce.

I writer di driver di filtro del file system devono notare che IoCreateStreamFileObject fa sì che una richiesta di IRP_MJ_CLEANUP venga inviata 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 per i driver di filtro rilevare 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 anche notare 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 per i driver di filtro rilevare in modo affidabile la creazione di oggetti file di flusso. Pertanto, i driver di filtro dovrebbero ricevere IRP_MJ_CLOSE richieste di oggetti file non visualizzati in precedenza.

Parametri

Un file system o un driver di filtro 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 chiusura.

  • DeviceObject

    Puntatore all'oggetto dispositivo di destinazione.

  • Flag Irp>

    Per questa richiesta vengono 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 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_CLOSE.

Vedi anche

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLOSE (informazioni di riferimento sul kernel WDK)

IRP_MJ_CLEANUP

IRP_MJ_CREATE

ObDereferenceObject