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 |