Freigeben über


FsRtlCheckOplock-Makro (rxprocs.h)

Die FsRtlCheckOplock Routine synchronisiert das IRP für einen Datei-E/A-Vorgang mit dem aktuellen opportunistischen Sperrzustand (Oplock) der Datei.

Syntax

void FsRtlCheckOplock(
   A1,
   A2,
   A3,
   A4,
   A5
);

Parameter

A1

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

A2

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

A3

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

A4

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-werden. Wenn es NULL-ist, wird der Aufrufer in einen Wartezustand versetzt, bis der opportunistische Sperrbruch 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:

kontextbezogene

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

Irp-

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

A5

Ein Zeiger auf eine vom Anrufer bereitgestellte Rückrufroutine, die aufgerufen werden soll, wenn der E/A-Vorgang in eine Arbeitswarteschlange gepostet wird. 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
      );

kontextbezogene

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

Irp-

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

Rückgabewert

Nichts

Bemerkungen

FsRtlCheckOplock synchronisiert das IRP für einen E/A-Vorgang mit dem aktuellen opportunistischen Sperrzustand einer Datei gemäß den folgenden Bedingungen:

  • Wenn die E/A-Operation dazu führt, dass die opportunistische Sperre aufgehoben wird, wird der opportunistische Sperrbruch initiiert.
  • Wenn der E/A-Vorgang erst fortgesetzt werden kann, wenn die opportunistische Sperrunterbrechung abgeschlossen ist, gibt FsRtlCheckOplock STATUS_PENDING zurück und ruft die Rückrufroutine auf, auf die der PostIrpRoutine Parameter verweist.
Wenn ein Dateisystem oder Filtertreiber opportunistische Sperren verwendet, muss er FsRtlCheckOplock von allen Verteilerroutinen für E/A-Vorgänge aufrufen, die opportunistische Sperrunterbrechungen verursachen können. Diese Regel gilt für die folgenden Typen von E/A-Vorgängen, da diese Vorgänge opportunistische Sperrunterbrechungen verursachen können:

IRP_MJ_CLEANUP

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_LOCK_CONTROL

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_WRITE

Ausführliche Informationen zu opportunistischen Sperren finden Sie in der Microsoft Windows SDK-Dokumentation.

Minifilter sollten FltCheckOplock- anstelle von FsRtlCheckOplockaufrufen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Diese Routine ist in Microsoft Windows 2000 und höheren Versionen von Windows-Betriebssystemen verfügbar.
Zielplattform- Universal
Header- rxprocs.h (include FltKernel.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL

Siehe auch

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplock-

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockFsctrl

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock