FsRtlCheckOplock-Makro (rxprocs.h)

Die FsRtlCheckOplock-Routine synchronisiert den 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 FsRtlInitializeOplock initialisiert worden sein.

A2

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

A3

Ein Zeiger auf vom Aufrufer definierte Kontextinformationen, die an die Rückrufroutinen übergeben werden sollen, auf die die Parameter CompletionRoutine und PostIrpRoutine 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 sein. Wenn der Wert 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 verfügt über die folgenden Parameter:

Kontext

Ein Kontextinformationszeiger, der im Context-Parameter an FsRtlCheckOplock übergeben wurde.

Irp

Ein Zeiger auf den 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 an eine Arbeitswarteschlange gesendet wird. Dieser Parameter ist optional und kann NULL sein.

Diese Routine wird wie folgt deklariert:

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

Kontext

Ein Kontextinformationszeiger, der im Context-Parameter an FsRtlCheckOplock übergeben wurde.

Irp

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

Rückgabewert

Keine

Bemerkungen

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

  • Wenn der E/A-Vorgang bewirkt, dass die opportunistische Sperre unterbrochen wird, wird der opportunistische Sperrbruch initiiert.
  • Wenn der E/A-Vorgang nicht fortgesetzt werden kann, bis der opportunistische Sperrumbruch abgeschlossen ist, gibt FsRtlCheckOplock STATUS_PENDING zurück und ruft die Rückrufroutine auf, auf die der Parameter PostIrpRoutine verweist.
Wenn ein Dateisystem oder Filtertreiber opportunistische Sperren verwendet, muss er FsRtlCheckOplock aus allen Dispatchroutinen für E/A-Vorgänge aufrufen, die opportunistische Sperrunterbrechungen verursachen können. Diese Regel gilt für die folgenden E/A-Vorgänge, da diese Vorgänge zu opportunistischen Sperrunterbrechungen führen 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 Dokumentation zu Microsoft Windows SDK.

Minifilter sollten FltCheckOplock anstelle von FsRtlCheckOplock aufrufen.

Anforderungen

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

Weitere Informationen

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