FsRtlCheckUpperOplock 函数 (ntifs.h)
FsRtlCheckUpperOplock 例程在辅助文件系统或分层文件系统中提供机会锁(oplock)检查它们保持更改状态。 辅助文件系统(如网络重定向器和群集文件服务)在辅助文件系统保存在较低文件系统中的 oplock 时调用 FsRtlCheckUpperOplock,更改状态。 状态更改可以通过中断或升级发生。 FsRtlCheckUpperOplock 将在必要时中断上层文件系统的 oplock,以确认新的低 oplock 状态。 调用方还可以为中断确认和挂起状态的通知提供可选回调。
语法
NTSTATUS FsRtlCheckUpperOplock(
[in] POPLOCK Oplock,
[in] ULONG NewLowerOplockState,
[in, optional] PVOID CompletionRoutineContext,
[in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
POPLOCK_FS_PREPOST_IRP PrePendRoutine,
[in] ULONG Flags
);
参数
[in] Oplock
文件的不透明不透明不透明指针。 此指针必须由上一次调用来初始化 FsRtlInitializeOplock。
[in] NewLowerOplockState
一个值,表示辅助文件系统在较低文件系统中保留的请求的 oplock。 这是以下内容的按位 OR 组合:
价值 | 意义 |
---|---|
OPLOCK_LEVEL_CACHE_READ | 指示 oplock Read (R) 类型。 |
OPLOCK_LEVEL_CACHE_WRITE | 指示 oplock Write (W) 类型。 |
OPLOCK_LEVEL_CACHE_HANDLE | 指示 oplock Handle (H) 类型。 |
[in, optional] CompletionRoutineContext
指向要传递给 CompletionRoutine 和 PrePendIrpRoutine 参数指向的回调例程的调用方定义的上下文信息的指针。
[in, optional] CompletionRoutine
指向调用方提供的回调例程的指针。 如果正在进行机会锁中断,则当中断完成时将调用此例程。 此参数是可选的,可以是 NULL。 如果为 NULL,则调用方将进入等待状态,直到机会锁中断完成。
此例程的声明和参数说明如下所示:
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
_In_ PVOID Context,
_In_opt_ PIRP Irp
);
参数 | 描述 |
---|---|
上下文 | 在 CompletionRoutineContext 参数中传递给 FsRtlCheckUpperOplock的上下文信息指针。 |
Irp | 指向 I/O 操作的 IRP 的可选指针。 FsRtlCheckUpperOplock 将始终将此设置为 NULL。 |
PrePendRoutine
指向调用方提供的回调例程的指针,如果 FsRtlCheckUpperOplock 将返回STATUS_PENDING。 此参数是可选的,可以是 NULL。
此例程的声明和参数说明如下所示:
typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
_In_ PVOID Context,
_in_opt_ PIRP Irp
);
参数 | 描述 |
---|---|
上下文 | 在 CompletionRoutineContext 参数中传递给 FsRtlCheckUpperOplock的上下文信息指针。 |
Irp | 指向 I/O 操作的 IRP 的可选指针。 FsRtlCheckUpperOplock 将始终将此设置为 NULL。 |
[in] Flags
关联的文件 I/O 操作的位掩码。 文件系统或筛选器驱动程序设置位以指定 FsRtlCheckUpperOplock的行为。 标志 参数具有以下选项:
价值 | 意义 |
---|---|
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK(0x00010000) | 如果 NewLowerOplockState 的值 导致任何 oplock 中断,则返回STATUS_CANNOT_BREAK_OPLOCK。 |
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ(0x00020000) | 仅中断读取(R)上 oplock 并通知 R 持有者,他们可以再次请求 R。所有其他上部 oplock 检查将返回STATUS_CANNOT_BREAK_OPLOCK。 |
返回值
FsRtlCheckUpperOplock 返回相应的 NTSTATUS 代码,例如以下代码之一:
返回代码 | 描述 |
---|---|
STATUS_SUCCESS | 不需要 oplock 中断或已确认中断。 如果 CompletionRoutine 为 NULL,则在处理 oplock 中断时 FsRtlCheckUpperOplock 块,而不是返回STATUS_PENDING。 |
STATUS_CANNOT_BREAK_OPLOCK | 无法完成 oplock 中断。 有关限制中断的条件,请参阅 标志。 |
STATUS_PENDING | 机会锁中断正在进行中。 如果已提供,PrePendIrpRoutine 将作为挂起操作的通知调用。 当 oplock 中断完成时,将调用 CompletionRoutine。 STATUS_PENDING是成功的代码。 |
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 8.1 |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |