FsRtlOplockBreakH 函数 (ntifs.h)

FsRtlOplockBreakH 例程 (oplock) 中断CACHE_HANDLE_LEVEL机会锁。

语法

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
);

参数

[in] Oplock

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

[in] Irp

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

[in] Flags

关联文件 I/O 操作的位掩码。 文件系统或筛选器驱动程序设置位以指定 FsRtlOplockBreakH 的行为。 Flags 参数具有以下选项:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

指定允许 oplock 中断继续,而不会阻止或挂起导致 oplock 中断的操作。

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

在 Windows 7 及更高版本中受支持。

指定允许CACHE_HANDLE_LEVEL oplock 中断继续,而不考虑 oplock 键。

[in, optional] Context

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

[in, optional] CompletionRoutine

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

此例程的声明如下:

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

此例程具有以下参数:

上下文

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

Irp

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

[in, optional] PostIrpRoutine

指向调用方提供的回调例程的指针,该例程在 I/O 操作要进行笔触时调用。 在 oplock 包向 IRP 提交之前调用例程。 此参数是可选的,可以为 NULL

此例程的声明如下:

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

上下文

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

Irp

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

返回值

FsRtlOplockBreakH 返回STATUS_SUCCESS或相应的 NTSTATUS 代码,例如以下代码之一:

返回代码 说明
STATUS_CANCELLED
IRP 已取消。 STATUS_CANCELLED是错误代码。
STATUS_PENDING
IRP 已发布到工作队列。 STATUS_PENDING是一个成功的代码。
STATUS_CANNOT_BREAK_OPLOCK
无法实现机会锁 (oplock) 中断。 IRP 是一个IRP_MJ_CREATE请求。 FILE_OPEN_REQUIRING_OPLOCK是在操作的 create options 参数中指定的,并且有一个已授予的 oplock。 STATUS_CANNOT_BREAK_OPLOCK是错误代码。

注解

当操作必须中断CACHE_HANDLE_LEVEL oplock 时,该操作将调用 FsRtlOplockBreakH

如果调用方在 Flags 参数中指定OPLOCK_FLAG_IGNORE_OPLOCK_KEYS标志, 则 FsRtlOplockBreakH 会中断所有CACHE_HANDLE_LEVEL oplock,而不考虑 oplock 键。 FsRtlOplockBreakH 的默认行为是中断其键与调用方文件对象上的键不匹配的 oplock。

微筛选器应调用 FltOplockBreakH 而不是 FsRtlOplockBreakH

要求

要求
最低受支持的客户端 FsRtlOplockBreakH 例程从 Windows 7 开始可用。
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FltOplockBreakH

FsRtlInitializeOplock