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 类型的详细信息,请参阅 Oplocks类型。

[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的行为。 标志 参数具有以下选项:

价值 意义
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 (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

另请参阅

FsRtlCheckUpperOplock

FsRtlOplockFsctrlEx