FsRtlCheckOplock 宏 (rxprocs.h)

FsRtlCheckOplock 例程将文件 I/O 操作的 IRP 与文件的当前机会锁同步 (oplock) 状态。

语法

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

参数

A1

文件的不透明机会锁指针。 此指针必须已通过先前对 FsRtlInitializeOplock 的调用进行初始化。

A2

指向 I/O 操作的 IRP 的指针。

A3

指向调用方定义的上下文信息的指针,该信息要传递给 CompletionRoutinePostIrpRoutine 参数指向的回调例程。

A4

指向调用方提供的回调例程的指针。 如果机会性锁中断正在进行,则此例程在中断完成时调用。 此参数是可选的,可以为 NULL。 如果为 NULL,则调用方将进入等待状态,直到机会锁中断完成。

此例程的声明如下:

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

此例程具有以下参数:

上下文

在 Context 参数中传递给 FsRtlCheckOplock上下文信息指针。

Irp

指向 I/O 操作的 IRP 的指针。

A5

指向调用方提供的回调例程的指针,该例程将在 I/O 操作发布到工作队列时调用。 此参数是可选的,可以为 NULL

此例程的声明如下:

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

上下文

在 Context 参数中传递给 FsRtlCheckOplock上下文信息指针。

Irp

指向 I/O 操作的 IRP 的指针。

返回值

备注

FsRtlCheckOplock 根据以下条件将 I/O 操作的 IRP 与文件的当前机会锁定状态同步:

  • 如果 I/O 操作将导致机会锁中断,则会启动机会锁中断。
  • 如果 I/O 操作在机会性锁中断完成之前无法继续, FsRtlCheckOplock 将返回STATUS_PENDING并调用 PostIrpRoutine 参数指向的回调例程。
如果文件系统或筛选器驱动程序使用机会锁,则必须从任何可能导致机会锁中断的 I/O 操作调度例程调用 FsRtlCheckOplock 。 此规则适用于以下类型的 I/O 操作,因为这些操作可能会导致机会性锁中断:

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

有关机会锁的详细信息,请参阅Microsoft Windows SDK文档。

微筛选器应调用 FltCheckOplock 而不是 FsRtlCheckOplock

要求

要求
最低受支持的客户端 此例程在 Microsoft Windows 2000 及更高版本的 Windows 操作系统中可用。
目标平台 通用
标头 rxprocs.h (包括 FltKernel.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

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