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 |