FsRtlCheckUpperOplock-Funktion (ntifs.h)

Die FsRtlCheckUpperOplock-Routine bietet eine opportunistische Sperrüberprüfung (Oplock) in sekundären oder mehrschichtigen Dateisystemen, wenn sich die oplocks, die sie enthalten, den Zustand ändern. Sekundäre Dateisysteme, z. B. Netzwerkumleitungen und Clusterdateidienste, rufen FsRtlCheckUpperOplock auf, wenn ein Oplock, der vom sekundären Dateisystem in einem niedrigeren Dateisystem gespeichert wird, den Zustand ändert. Eine Zustandsänderung kann entweder durch einen Umbruch oder ein Upgrade erfolgen. FsRtlCheckUpperOplock unterbricht bei Bedarf den Oplock des oberen Dateisystems, um den neuen unteren Oplock-Zustand zu bestätigen. Der Aufrufer kann auch optionale Rückrufe für Benachrichtigungen über die Bestätigung von Unterbrechungen und ausstehende 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 Oplock-Zeiger für die Datei. Dieser Zeiger muss durch einen vorherigen Aufruf von FsRtlInitializeOplock initialisiert worden sein.

[in] NewLowerOplockState

Ein Wert, der den angeforderten Oplock darstellt, der in einem niedrigeren Dateisystem von einem sekundären Dateisystem gespeichert wird. Dies ist eine bitweise OR-Kombination aus folgendem:

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-Typ (H) an.

[in, optional] CompletionRoutineContext

Ein Zeiger auf vom Aufrufer definierte Kontextinformationen, die an die Rückrufroutine übergeben werden sollen, auf die die Parameter CompletionRoutine und PrePendIrpRoutine verweisen.

[in, optional] CompletionRoutine

Ein Zeiger auf eine vom Anrufer 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 es NULL ist, wird der Aufrufer in einen Wartezustand versetzt, bis die opportunistische Sperrunterbrechung 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
Context Ein Kontextinformationszeiger, der im CompletionRoutineContext-Parameter an FsRtlCheckUpperOplock übergeben wurde.
Irp Ein optionaler Zeiger auf den IRP für den E/A-Vorgang. FsRtlCheckUpperOplock legt dies immer auf NULL fest.

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
Context Ein Kontextinformationszeiger, der im CompletionRoutineContext-Parameter an FsRtlCheckUpperOplock übergeben wurde.
Irp Ein optionaler Zeiger auf den IRP für den E/A-Vorgang. FsRtlCheckUpperOplock legt dies immer auf NULL fest.

[in] Flags

Eine Bitmaske für den zugeordneten Datei-E/A-Vorgang. Ein Dateisystem oder Filtertreiber legt Bits fest, um das Verhalten von FsRtlCheckUpperOplock anzugeben. Der Flags-Parameter 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-Umbruch führt.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Break only Read (R) obere Oplocks und benachrichtigen R-Besitzer, dass sie erneut R anfordern können. Alle anderen oberen Oplockprüfungen geben STATUS_CANNOT_BREAK_OPLOCK zurück.

Rückgabewert

FsRtlCheckUpperOplock gibt einen geeigneten NTSTATUS-Code zurück, z. B. einen der folgenden:

Rückgabecode Beschreibung
STATUS_SUCCESS Ein Oplock-Umbruch ist nicht erforderlich, oder die Unterbrechung wurde bestätigt. Wenn CompletionRoutine NULL ist, blockiert FsRtlCheckUpperOplock , während der Oplock-Umbruch verarbeitet wird, anstatt STATUS_PENDING zurückzugeben.
STATUS_CANNOT_BREAK_OPLOCK Der Oplock-Umbruch kann nicht erreicht werden. Bedingungen, die einen Umbruch einschränken, finden Sie unter Flags .
STATUS_PENDING Ein opportunistischer Sperrbruch 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
Unterstützte Mindestversion (Client) Windows 8.1
Zielplattform Universell
Header ntifs.h (include Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

Weitere Informationen

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl