Freigeben über


FsRtlOplockBreakH-Funktion (ntifs.h)

Die FsRtlOplockBreakH Routine bricht CACHE_HANDLE_LEVEL opportunistische Sperren (Oplocks).

Syntax

NTSTATUS FsRtlOplockBreakH(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [in]           ULONG                         Flags,
  [in, optional] PVOID                         Context,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
  [in, optional] POPLOCK_FS_PREPOST_IRP        PostIrpRoutine
);

Parameter

[in] Oplock

Ein undurchsichtiger opportunistischer Sperrzeiger für die Datei. Dieser Zeiger muss durch einen vorherigen Aufruf von FsRtlInitializeOplockinitialisiert worden sein.

[in] Irp

Ein Zeiger auf das IRP für den E/A-Vorgang.

[in] Flags

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

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Gibt an, dass ein Oplock-Unterbrechung fortgesetzt werden kann, ohne den Vorgang zu blockieren oder ausstehend, der den Oplock-Unterbrechung verursacht hat.

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

Unterstützt in Windows 7 und höheren Versionen.

Gibt an, dass CACHE_HANDLE_LEVEL Oplockunterbrechungen unabhängig von der Oplocktaste fortgesetzt werden können.

[in, optional] Context

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

[in, optional] CompletionRoutine

Ein Zeiger auf eine vom Aufrufer bereitgestellte Rückrufroutine. Wenn eine Oplockunterbrechung ausgeführt wird, wird diese Routine aufgerufen, wenn die Unterbrechung abgeschlossen ist. Dieser Parameter ist optional und kann NULL-werden. Wenn es NULL-ist, wird der Aufrufer in einen Wartezustand versetzt, bis der Oplock-Umbruch abgeschlossen ist.

Diese Routine wird wie folgt deklariert:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

Diese Routine hat die folgenden Parameter:

Zusammenhang

Ein Kontextinformationspunkt, der im parameter Context an FsRtlOplockBreakHübergeben wurde.

Irp

Ein Zeiger auf das IRP für den E/A-Vorgang.

[in, optional] PostIrpRoutine

Ein Zeiger auf eine vom Aufrufer bereitgestellte Rückrufroutine, die aufgerufen werden soll, wenn der E/A-Vorgang eingestiftet werden soll. Die Routine wird aufgerufen, bevor das Oplock-Paket die IRP übergibt. Dieser Parameter ist optional und kann NULL-werden.

Diese Routine wird wie folgt deklariert:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

Zusammenhang

Ein Kontextinformationspunkt, der im parameter Context an FsRtlOplockBreakHübergeben wurde.

Irp

Ein Zeiger auf das IRP für den E/A-Vorgang.

Rückgabewert

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

Rückgabecode Beschreibung
STATUS_CANCELLED
Das IRP wurde abgebrochen. STATUS_CANCELLED ist ein Fehlercode.
STATUS_PENDING
Das IRP wurde in eine Arbeitswarteschlange gepostet. STATUS_PENDING ist ein Erfolgscode.
STATUS_CANNOT_BREAK_OPLOCK
Die opportunistische Sperre (Oplock) kann nicht erreicht werden. Das IRP ist eine IRP_MJ_CREATE Anforderung. FILE_OPEN_REQUIRING_OPLOCK wurde im Parameter "Create options" für den Vorgang angegeben, und es ist ein gewährter Oplock vorhanden. STATUS_CANNOT_BREAK_OPLOCK ist ein Fehlercode.

Bemerkungen

Wenn ein Vorgang CACHE_HANDLE_LEVEL Oplocks unterbrechen muss, ruft der Vorgang FsRtlOplockBreakHauf.

Wenn der Aufrufer das OPLOCK_FLAG_IGNORE_OPLOCK_KEYS Flag im parameter Flags angibt, FsRtlOplockBreakH alle CACHE_HANDLE_LEVEL Oplocks unabhängig von der Oplock-Taste umbricht. Das Standardverhalten von FsRtlOplockBreakH besteht darin, Oplocks zu unterbrechen, deren Schlüssel nicht mit dem Schlüssel im Dateiobjekt des Aufrufers übereinstimmen.

Minifilter sollten FltOplockBreakH- anstelle von FsRtlOplockBreakHaufrufen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Die FsRtlOplockBreakH-Routine ist ab Windows 7 verfügbar.
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL

Siehe auch

FltOplockBreakH

FsRtlInitializeOplock