Überprüfen des Oplock-Zustands eines IRP_MJ_CREATE Vorgangs
Folgendes gilt nur, wenn ein vorhandener Stream einer Datei geöffnet wird (das heißt, neu erstellte Streams können keine bereits vorhandenen Oplocks enthalten).
Hinweis Wenn IRP_MJ_CREATE für einen oplock verarbeitet werden, wird der Oplock nur unterbrochen, wenn der gewünschte Zugriff nichts anderes als FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES oder SYNCHRONIZE enthält, es sei denn, FILE_RESERVE_OPFILTER wird angegeben. Das Angeben FILE_RESERVE_OPFILTER führt immer zu einem Oplock-Umbruch, wenn die Erstellung erfolgreich ist. Aus Gründen der Kürze und Einfachheit lässt die folgende Tabelle das Vorstehende aus, da es für alle Oplocks gilt.
Anforderungstyp | Bedingungen |
---|---|
Ebene 1 |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
|
Ebene 2 |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
|
Batch |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
|
Filter |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
|
Lesen |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
|
Read-Handle |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
|
Lesen/Schreiben |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
|
Lese-Schreib-Handle |
Fehler bei IRP_MJ_CREATE, wenn:
|
Wenn der Oplock unterbrochen ist:
|
Das Dateisystem führt zusätzliche Überprüfungen für Batch- und Filter-Oplocks (anstelle des oplock-Pakets selbst) durch, wenn ein IRP_MJ_CREATE-Vorgang verarbeitet wird. Dies wirkt sich darauf aus, ob das Dateisystem das oplock-Paket zur Ausführung der Oplock-Unterbrechungsverarbeitung auffragt. Dies ist ein Fall, in dem Vorgänge für einen Datenstrom die Oplocks für andere Datenströme derselben Datei (d. a. die letzten beiden Listenelemente der folgenden Kriterienliste) beeinflussen können. Wenn mindestens eines der folgenden Kriterien erfüllt ist, sendet das Dateisystem eine Anforderung an das oplock-Paket, um die Oplock-Unterbrechungsverarbeitung durchzuführen:
Fordern Sie eine Unterbrechung an, wenn dies eine geöffnete Netzwerkabfrage ist und eine KTM-Transaktion vorhanden ist. Andernfalls fordern Sie keine Unterbrechung für geöffnete Netzwerkabfragen an.
Wenn ein SUPERSEDE-, OVERWRITE- oder OVERWRITE_IF-Vorgang für einen alternativen Datenstrom ausgeführt wird und FILE_SHARE_DELETE nicht angegeben ist und es einen Batch- oder Filter-Oplock für den primären Datenstrom gibt, fordern Sie eine Unterbrechung des Batch- oder Filter-Oplocks für den primären Datenstrom an.
Wenn ein SUPERSEDE-, OVERWRITE- oder OVERWRITE_IF-Vorgang für den primären Datenstrom ausgeführt wird und der DELETE-Zugriff angefordert wurde und es Batch- oder Filter-Oplocks für einen alternativen Datenstrom gibt, fordern Sie eine Unterbrechung der Batch- oder Filter-Oplocks für alle alternativen Datenströme an, die diese daten enthalten.
Wenn das Dateisystem entscheidet, das oplock-Paket zur Ausführung der Oplock-Unterbrechungsverarbeitung aufzufordern, gelten die regeln in der vorherigen Tabelle.
Die Überprüfung zum Unterbrechen von Batch- und Filter-Oplocks erfolgt, bevor die Freigabezugriffsprüfungen durchgeführt werden. Dies bedeutet, dass der Batch- oder Filter-Oplock auch dann unterbrochen wird, wenn die offene Anforderung letztendlich aufgrund einer Freigabeverletzung fehlschlägt.