FsRtlOplockBreakH 函数 (ntifs.h)
FsRtlOplockBreakH 例程中断CACHE_HANDLE_LEVEL机会锁(oplocks)。
语法
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的行为。 标志 参数具有以下选项:
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED(0x00000001)
指定允许 oplock 中断继续,而不阻止或挂起导致 oplock 中断的操作。
OPLOCK_FLAG_IGNORE_OPLOCK_KEYS(0x00000008)
在 Windows 7 及更高版本中受支持。
指定允许CACHE_HANDLE_LEVEL oplock 中断继续进行,而不考虑 oplock 键。
[in, optional] Context
指向要传递给 CompletionRoutine 和 PostIrpRoutine 参数指向的回调例程的调用方定义的上下文信息的指针。
[in, optional] CompletionRoutine
指向调用方提供的回调例程的指针。 如果操作锁中断正在进行中,则当中断完成时将调用此例程。 此参数是可选的,可以 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 代码,例如以下代码之一:
返回代码 | 描述 |
---|---|
|
IRP 已取消。 STATUS_CANCELLED是错误代码。 |
|
IRP 已发布到工作队列。 STATUS_PENDING是成功的代码。 |
|
无法完成机会锁(oplock)中断。 IRP 是IRP_MJ_CREATE请求。 在操作的 create options 参数中指定了FILE_OPEN_REQUIRING_OPLOCK,并且有一个授予的 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。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 7 开始,FsRtlOplockBreakH 例程可用。 |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |