FsRtlUpperOplockFsctrl 函数 (ntifs.h)

FsRtlUpperOplockFsctrl 例程处理机会性锁 (oplock) 辅助或分层文件系统的请求和确认。 上层文件系统提交在较低文件系统中保留的 oplock 的状态。 FsRtlUpperOplockFsctrl 将决定是授予还是拒绝上层文件系统 oplock。

语法

NTSTATUS FsRtlUpperOplockFsctrl(
  [in] POPLOCK Oplock,
  [in] PIRP    Irp,
  [in] ULONG   OpenCount,
  [in] ULONG   LowerOplockState,
  [in] ULONG   Flags
);

参数

[in] Oplock

文件的不透明不锁定指针。 此指针必须已由之前对 FsRtlInitializeOplock 的调用初始化。

[in] Irp

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

[in] OpenCount

如果请求独占 oplock,则文件的用户句柄数。 为级别 2、R 或 RH oplock 请求设置非零值表示文件上有字节范围锁。 有关 oplock 类型的详细信息,请参阅 Oplock 的类型

[in] LowerOplockState

上层文件系统保留的较低 oplock 级别的值。 这是以下各项的按位 OR 组合:

含义
OPLOCK_LEVEL_CACHE_READ 指示 oplock Read (R) 类型。
OPLOCK_LEVEL_CACHE_WRITE 指示 oplock Write (W) 类型。
OPLOCK_LEVEL_CACHE_HANDLE 指示 oplock Handle (H) 类型。

[in] Flags

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

含义
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) 文件系统验证了任何当前打开的句柄上的所有 oplock 键是否匹配。 通过指定此标志,允许 oplock 包在文件的多个打开句柄存在时授予级别 RW 或 RWH 的 oplock。

返回值

FsRtlUpperOplockFsctrl 返回以下 NTSTATUS 值之一:

返回代码 说明
STATUS_SUCCESS 对于IRP_MJ_CREATE请求,STATUS_SUCCESS指示已授予请求的筛选器机会锁 (oplock) 。 对于 FSCTL 操作,STATUS_SUCCESS的含义取决于 FSCTL 代码。 有关详细信息,请参阅 FsRtlOplockFsctrlEx 中的“备注”部分。
STATUS_CANCELLED I/O 操作已取消。 STATUS_CANCELLED是错误代码。
STATUS_INVALID_PARAMETER I/O 操作的 FSCTL 代码不是有效的值 oplock 请求。 FsRtlOplockFsctrlEx 的“备注”部分列出了有效的请求类型。 STATUS_INVALID_PARAMETER是错误代码。
STATUS_OPLOCK_NOT_GRANTED 无法授予 oplock。 请求的上层文件系统 oplock 的级别对于为较低文件系统授予的 oplock 无效。 STATUS_OPLOCK_NOT_GRANTED是错误代码。
STATUS_PENDING 仅用于 FSCTL 操作。 STATUS_PENDING的含义取决于 FSCTL 代码。 有关详细信息,请参阅 FsRtlOplockFsctrlEx 中的“备注”部分。 STATUS_PENDING是一个成功代码。
STATUS_CANNOT_GRANT_REQUESTED_OPLOCK 不允许对新 oplock 进行 oplock 确认。 锁的上层文件系统的级别对于较低的文件系统 oplock 无效。

要求

要求
最低受支持的客户端 Windows 8.1
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

另请参阅

FsRtlCheckUpperOplock

FsRtlOplockFsctrlEx