IRP_MJ_CLEANUP (FS- und FS-Filter)
Sendebedingungen
Der Empfang der IRP_MJ_CLEANUP Anforderung gibt an, dass die Handleverweisanzahl für ein Dateiobjekt 00 erreicht hat. (Mit anderen Worten, alle Handles für das Dateiobjekt wurden geschlossen.) Häufig wird es gesendet, wenn eine Benutzermodusanwendung die Win32 CloseHandle-Funktion (oder wenn ein Kernelmodustreiber ZwClose aufgerufen hat) für das letzte ausstehende Handle an ein Dateiobjekt aufgerufen hat.
Es ist wichtig zu beachten, dass das Dateiobjekt möglicherweise weiterhin verwendet wird, wenn alle Handles für ein Dateiobjekt geschlossen wurden. Systemkomponenten, wie der Cache-Manager und der Speicher-Manager, enthalten möglicherweise ausstehende Verweise auf das Dateiobjekt. Diese Komponenten können auch nach Dem Empfang einer IRP_MJ_CLEANUP Anforderung weiterhin in eine Datei lesen oder aus dieser schreiben.
Vorgang: Dateisystemtreiber
Wenn das Zielgerätobjekt das Steuerungsgerätobjekt des Dateisystems ist, muss der Dateisystemtreiber die IRP abschließen.
Andernfalls sollte der Dateisystemtreiber die Bereinigungsanforderung verarbeiten.
Vorgang: Legacy-Dateisystemfiltertreiber
Wenn das Zielgerätobjekt das Steuergerätobjekt des Filtertreibers ist, muss der Filtertreiber die IRP abschließen.
Andernfalls sollte der Filtertreiber den IRP an den nächstniedrigen Treiber auf dem Stapel übergeben, nachdem er die erforderliche Verarbeitung ausgeführt hat.
Dateisystemfiltertreiber-Autoren sollten beachten, dass IoCreateStreamFileObject bewirkt, dass eine IRP_MJ_CLEANUP Anforderung an den Dateisystemtreiberstapel für das Volume gesendet wird. Da Dateisysteme häufig Streamdateiobjekte als Nebeneffekt anderer Vorgänge als IRP_MJ_CREATE erstellen, ist es für Filtertreiber schwierig, die Erstellung von Streamdateiobjekten zuverlässig zu erkennen. Daher sollte ein Filtertreiber erwarten, dass er IRP_MJ_CLEANUP und IRP_MJ_CLOSE Anforderungen für zuvor nicht angezeigte Dateiobjekte empfängt.
Filtertreiberautoren sollten auch beachten, dass IoCreateStreamFileObjectLite im Gegensatz zu IoCreateStreamFileObjectLite nicht dazu führt, dass eine IRP_MJ_CLEANUP Anforderung an den Dateisystemtreiberstapel gesendet wird. Aus diesem Grund und da Dateisysteme häufig Streamdateiobjekte als Nebeneffekt anderer Vorgänge als IRP_MJ_CREATE erstellen, ist es für Filtertreiber schwierig, die Erstellung von Streamdateiobjekten zuverlässig zu erkennen. Daher sollten Filtertreiber davon ausgehen, IRP_MJ_CLOSE Anforderungen für zuvor nicht angezeigte Dateiobjekte zu empfangen.
Parameter
Ein Dateisystem- oder Legacy-Filtertreiber ruft IoGetCurrentIrpStackLocation mit dem angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP zu erhalten, der in der folgenden Liste als IrpSp angezeigt wird. (Die IRP wird als Irp angezeigt.) Der Treiber kann die Informationen, die in den folgenden Elementen des IRP und des IRP-Stapelspeicherorts festgelegt sind, bei der Verarbeitung einer Bereinigungsanforderung verwenden.
DeviceObject
Zeiger auf das Zielgerätobjekt.
Irp-Flags>
Für diese Anforderung werden die folgenden Flags festgelegt:
- IRP_CLOSE_OPERATION
- IRP_SYNCHRONOUS_API
Irp-IoStatus>
Zeiger auf eine IO_STATUS_BLOCK-Struktur, die die endgültige Vervollständigung status und Informationen zum angeforderten Vorgang empfängt.
Irp-FileObject>
Zeiger auf das Dateiobjekt, das DeviceObject zugeordnet ist.
Der Parameter Irp-FileObject> enthält einen Zeiger auf das Feld RelatedFileObject, das ebenfalls eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist während der Verarbeitung von IRP_MJ_CLEANUP ungültig und sollte nicht verwendet werden.
Irp-MajorFunction>
Gibt IRP_MJ_CLEANUP an.
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für