Freigeben über


Ü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:

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.

Wenn der Oplock unterbrochen ist:

  • Umbruch auf Keine , WENN:

    • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

      OR

    • Es werden alle folgenden Create-Dispositionswerte angegeben:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    ODER:

    • Wechseln Sie zu Ebene 2.
  • Eine Bestätigung muss empfangen werden, bevor der Vorgang fortgesetzt wird.

Ebene 2

Fehler bei IRP_MJ_CREATE, wenn:

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.
  • UND:
    • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

      OR

    • Es werden alle folgenden Create-Dispositionswerte angegeben:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

Wenn der Oplock unterbrochen ist:

  • Wechseln Sie zu Keine.

  • Es ist keine Bestätigung erforderlich, der Vorgang wird sofort fortgesetzt.

Batch

Fehler bei IRP_MJ_CREATE, wenn:

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.

Wenn der Oplock unterbrochen ist:

  • Umbruch auf Keine , WENN:

    • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

      OR

    • Es werden alle folgenden Create-Dispositionswerte angegeben:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    ODER:

    • Wechseln Sie zu Ebene 2.
  • Eine Bestätigung muss empfangen werden, bevor der Vorgang fortgesetzt wird.

Filter

Fehler bei IRP_MJ_CREATE, wenn:

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.

  • UND:
    • Ein "beschreibbarer" gewünschter Zugriff wurde für den Stream angefordert, der nicht für FILE_SHARE_READ Zugriff geöffnet wurde. Beachten Sie, dass der "schreibbare" Zugriff als jedes andere Attribut definiert ist als:

      • FILE_READ_ATTRIBUTES
      • FILE_WRITE_ATTRIBUTES
      • FILE_READ_DATA
      • FILE_READ_EA
      • FILE_EXECUTE
      • SYNCHRONIZE
      • READ_CONTROL

Wenn der Oplock unterbrochen ist:

  • Wechseln Sie zu Keine.

  • Eine Bestätigung muss empfangen werden, bevor der Vorgang fortgesetzt wird.

Lesen

Fehler bei IRP_MJ_CREATE, wenn:

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.

  • UND:
    • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

      OR

    • Es werden alle folgenden Create-Dispositionswerte angegeben:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

Wenn der Oplock unterbrochen ist:

  • Wechseln Sie zu Keine.

  • Es ist keine Bestätigung erforderlich, der Vorgang wird sofort fortgesetzt.

Read-Handle

Fehler bei IRP_MJ_CREATE, wenn:

  • Die aktuell geöffneten Konflikte mit einem vorhandenen Offen, sodass ein Verstoß gegen die Freigabe auftreten würde.

    OR

  • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

    OR

  • Es werden alle folgenden Create-Dispositionswerte angegeben:

    • FILE_SUPERSEDE
    • FILE_OVERWRITE
    • FILE_OVERWRITE_IF

    AND (für eine der drei oben genannten Bedingungen)

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.

Wenn der Oplock unterbrochen ist:

  • Umbruch auf Keine , WENN:

    • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

      OR

    • Es werden alle folgenden Create-Dispositionswerte angegeben:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    ODER:

    • Break to Read( Break to Read).
  • Wenn der Oplock unterbrochen wurde, weil der aktuell geöffnete Konflikt mit einer vorhandenen Open-Instanz besteht, sodass eine Freigabeverletzung auftreten würde, muss eine Bestätigung empfangen werden, bevor der Vorgang fortgesetzt wird.
  • Wenn der Oplock aus einem anderen Grund unterbrochen wurde, obwohl eine Bestätigung der Unterbrechung erforderlich ist, wird der Vorgang sofort fortgesetzt (z. B. ohne auf die Bestätigung zu warten).

Lesen/Schreiben

Fehler bei IRP_MJ_CREATE, wenn:

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.

Wenn der Oplock unterbrochen ist:

  • Umbruch auf Keine , WENN:

    • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

      OR

    • Es werden alle folgenden Create-Dispositionswerte angegeben:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    ODER:

    • Break to Read( Break to Read).
  • Eine Bestätigung muss empfangen werden, bevor der Vorgang fortgesetzt wird.

Lese-Schreib-Handle

Fehler bei IRP_MJ_CREATE, wenn:

  • Der oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, auf dem geöffnet wird, unterscheidet sich von dem oplock-Schlüssel, der dem FILE_OBJECT zugeordnet ist, der den Oplock besitzt.

Wenn der Oplock unterbrochen ist:

  • Umbruch auf Keine , WENN:

    • Das FILE_RESERVE_OPFILTER-Flag ist festgelegt.

      OR

    • Es werden alle folgenden Create-Dispositionswerte angegeben:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    ODER:

    • Break to Read-Write, wenn die aktuell geöffnete Mit einem vorhandenen Geöffneten in Konflikt kommt, sodass eine Freigabeverletzung auftreten würde. Andernfalls wechseln Sie zu Read-Handle.

  • Eine Bestätigung muss empfangen werden, bevor der Vorgang fortgesetzt wird.

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.