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 |