IRP_MJ_CLOSE
Jeder Treiber muss Close-Anforderungen in einer DispatchClose-Routine verarbeiten, mit der möglichen Ausnahme eines Treibers, dessen Gerät nicht deaktiviert oder vom Computer entfernt werden kann, ohne das System herunterzusetzen. Ein Datenträgertreiber, dessen Gerät die Systemseitendatei enthält, ist ein Beispiel für einen solchen Treiber. Beachten Sie, dass der Treiber eines solchen Geräts auch nicht dynamisch entladen werden kann.
Sendebedingungen
Der Empfang dieser Anforderung gibt an, dass das letzte Handle des Dateiobjekts, das dem Zielgerätobjekt zugeordnet ist, geschlossen und freigegeben wurde. Alle ausstehenden E/A-Anforderungen wurden abgeschlossen oder abgebrochen.
Eingabeparameter
Keine
Ausgabeparameter
Keine
Vorgang
Viele Geräte- und Zwischentreiber legen lediglich STATUS_SUCCESS im E/A-status-Block des IRP fest und schließen die Close-Anforderung ab. Was ein bestimmter Treiber nach Empfang einer engen Anforderung tut, hängt jedoch vom Design des Fahrers ab. Im Allgemeinen sollte ein Treiber alle Aktionen rückgängig machen, die er nach Erhalt der IRP_MJ_CREATE-Anforderung ausführt. Gerätetreiber, deren Geräteobjekte exklusiv sind, z. B. ein serieller Treiber, können die Hardware auch nach Eingang einer Close-Anforderung zurücksetzen.
Die IRP_MJ_CLOSE-Anforderung wird nicht unbedingt im Kontext des Prozesses gesendet, der das Dateiobjekthandle geschlossen hat. Wenn der Treiber prozessspezifische Ressourcen freigeben muss, z. B. Benutzerspeicher, die der Treiber zuvor gesperrt oder zugeordnet hat, muss er dies als Reaktion auf eine IRP_MJ_CLEANUP Anforderung tun.
Die IRP_MJ_CLOSE-Anforderung wird immer an PASSIVE_LEVEL gesendet.
Anforderungen
Header |
Wdm.h (einschließen Wdm.h, Ntddk.h oder Ntifs.h) |