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 |