Freigeben über


FsRtlCheckUpperOplock-Funktion (ntifs.h)

Die FsRtlCheckUpperOplock Routine stellt opportunistische Sperrüberprüfung (Oplock) in sekundären oder layerierten Dateisystemen bereit, wenn die Oplocks den Änderungszustand beibehalten. Sekundäre Dateisysteme, z. B. Netzwerkumleitungen und Clusteringdateidienste, rufen FsRtlCheckUpperOplock auf, wenn ein Oplock, der im sekundären Dateisystem in einem niedrigeren Dateisystem gespeichert ist, den Zustand ändert. Eine Zustandsänderung kann entweder durch eine Unterbrechung oder ein Upgrade erfolgen. FsRtlCheckUpperOplock den Oplock des oberen Dateisystems unterbricht, falls erforderlich, um den neuen niedrigeren Oplock-Zustand zu bestätigen. Der Anrufer kann auch optionale Rückrufe für Benachrichtigungen zur Unterbrechungsbestätigung und zum Ausstehenden Status bereitstellen.

Syntax

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [in]           ULONG                         Flags
);

Parameter

[in] Oplock

Ein undurchsichtiger Oplockzeiger für die Datei. Dieser Zeiger muss durch einen vorherigen Aufruf von fsRtlInitializeOplockinitialisiert worden sein.

[in] NewLowerOplockState

Ein Wert, der den angeforderten Oplock in einem niedrigeren Dateisystem durch ein sekundäres Dateisystem darstellt. Dies ist eine bitweise OR-Kombination der folgenden:

Wert Bedeutung
OPLOCK_LEVEL_CACHE_READ Gibt einen Oplock Read (R)-Typ an.
OPLOCK_LEVEL_CACHE_WRITE Gibt einen Oplock Write -Typ (W) an.
OPLOCK_LEVEL_CACHE_HANDLE Gibt einen Oplock Handle (H)-Typ an.

[in, optional] CompletionRoutineContext

Ein Zeiger zum Aufrufen definierter Kontextinformationen, die an die Rückrufroutinen übergeben werden sollen, auf die die CompletionRoutine und PrePendIrpRoutine Parameter verweisen.

[in, optional] CompletionRoutine

Ein Zeiger auf eine vom Aufrufer bereitgestellte Rückrufroutine. Wenn ein opportunistischer Sperrbruch ausgeführt wird, wird diese Routine aufgerufen, wenn die Unterbrechung abgeschlossen ist. Dieser Parameter ist optional und kann NULL sein. Wenn er NULL ist, wird der Aufrufer in einen Wartezustand versetzt, bis der opportunistische Sperrbruch abgeschlossen ist.

Die Deklarations- und Parameterbeschreibungen dieser Routine sind wie folgt:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
Parameter Beschreibung
Kontext- Ein Kontextinformationspunkt, der im CompletionRoutineContext Parameter an FsRtlCheckUpperOplockübergeben wurde.
Irp- Ein optionaler Zeiger auf das IRP für den E/A-Vorgang. FsRtlCheckUpperOplock- wird dies immer auf NULL festgelegt.

PrePendRoutine

Ein Zeiger auf eine vom Aufrufer bereitgestellte Rückrufroutine, die aufgerufen werden soll, wenn FsRtlCheckUpperOplock STATUS_PENDING zurückgibt. Dieser Parameter ist optional und kann NULL sein.

Die Deklarations- und Parameterbeschreibungen dieser Routine sind wie folgt:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
Parameter Beschreibung
Kontext- Ein Kontextinformationspunkt, der im CompletionRoutineContext Parameter an FsRtlCheckUpperOplockübergeben wurde.
Irp- Ein optionaler Zeiger auf das IRP für den E/A-Vorgang. FsRtlCheckUpperOplock- wird dies immer auf NULL festgelegt.

[in] Flags

Eine Bitmaske für den zugeordneten Datei-E/A-Vorgang. Ein Dateisystem oder Filtertreiber legt Bits fest, um das Verhalten von FsRtlCheckUpperOplockanzugeben. Der parameter Flags verfügt über die folgenden Optionen:

Wert Bedeutung
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) Gibt STATUS_CANNOT_BREAK_OPLOCK zurück, wenn der Wert von NewLowerOplockState zu einem Oplock-Unterbrechung führt.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Break only Read (R) upper oplocks and notify R holders that they may again request R. Alle anderen oberen Oplock-Prüfungen werden STATUS_CANNOT_BREAK_OPLOCK zurückgegeben.

Rückgabewert

FsRtlCheckUpperOplock gibt einen geeigneten NTSTATUS-Code wie einen der folgenden zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS Ein Oplockbruch ist nicht erforderlich oder die Unterbrechung wurde bestätigt. Wenn CompletionRoutine- NULL ist, FsRtlCheckUpperOplock Blöcke, während der Oplock-Umbruch verarbeitet wird, anstatt STATUS_PENDING zurückzugeben.
STATUS_CANNOT_BREAK_OPLOCK Der Oplockbruch kann nicht erreicht werden. Informationen zu Bedingungen, die einen Umbruch einschränken, finden Sie unter Flags.
STATUS_PENDING Eine opportunistische Sperrpause ist im Gange. Wenn angegeben, wird PrePendIrpRoutine als Benachrichtigung über den ausstehenden Vorgang aufgerufen. CompletionRoutine- wird aufgerufen, wenn der Oplock-Umbruch abgeschlossen ist. STATUS_PENDING ist ein Erfolgscode.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 8.1
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- IRQL-<= APC_LEVEL

Siehe auch

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl