FsRtlOplockFsctrlEx 函数 (ntifs.h)
FsRtlOplockFsctrlEx 例程代表文件系统或筛选器驱动程序执行各种机会锁 (oplock) 操作。
语法
NTSTATUS FsRtlOplockFsctrlEx(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in] ULONG OpenCount,
[in] ULONG Flags
);
参数
[in] Oplock
文件的不透明不锁定指针。 此指针必须已通过先前对 FsRtlInitializeOplock 的调用进行初始化。
[in] Irp
指向 I/O 操作的 IRP 的指针。 此参数是必需的,不能为 NULL。
[in] OpenCount
文件的用户句柄数(如果正在请求独占 oplock)。 为级别 2、R 或 RH 操作锁请求设置非零值表示文件上存在字节范围锁。 有关 oplock 类型的信息,请参阅 Oplock 概述。
[in] Flags
关联的 oplock 操作的位掩码。 文件系统或筛选器驱动程序设置位以指定 FsRtlOplockFsctrlEx 的行为。 此参数具有以下选项:
标志 | 含义 |
---|---|
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) | 文件系统验证了任何当前打开的句柄上的所有 oplock 键是否匹配。 通过指定此标志,当存在文件的多个打开句柄时,允许 oplock 包授予级别 RW 或 RWH 的 oplock。 有关 oplock 类型的详细信息,请参阅 Oplock 概述。 |
返回值
FsRtlOplockFsctrlEx 返回以下 NTSTATUS 值之一:
返回代码 | 说明 |
---|---|
STATUS_SUCCESS | 对于IRP_MJ_CREATE请求,STATUS_SUCCESS指示已授予请求的筛选器 oplock。 对于 FSCTL 操作,STATUS_SUCCESS的含义取决于 FSCTL 代码。 有关详细信息,请参阅以下“备注”部分中列出的 FSCTL 代码的参考页。 |
STATUS_CANCELLED | I/O 操作已取消。 STATUS_CANCELLED是错误代码。 |
STATUS_INVALID_PARAMETER | I/O 操作的 FSCTL 代码不是以下“备注”部分中列出的有效值之一。 STATUS_INVALID_PARAMETER是错误代码。 |
STATUS_OPLOCK_NOT_GRANTED | 无法授予 oplock。 STATUS_OPLOCK_NOT_GRANTED是错误代码。 |
STATUS_PENDING | 仅用于 FSCTL 操作。 STATUS_PENDING的含义取决于 FSCTL 代码。 有关详细信息,请参阅以下“备注”部分中列出的 FSCTL 代码的参考页。 STATUS_PENDING是一个成功的代码。 |
STATUS_CANNOT_BREAK_OPLOCK | 无法授予新的 oplock。 IRP 是一个IRP_MJ_CREATE请求,FILE_OPEN_REQUIRING_OPLOCK是在操作的 create options 参数中指定的。 STATUS_CANNOT_BREAK_OPLOCK是一个成功代码。 |
注解
文件系统和旧筛选器驱动程序调用 FsRtlOplockFsctrlEx ,以对创建或文件系统控制 I/O 操作执行各种 oplock 操作。 微筛选器应调用 FltOplockFsctrlEx 而不是 FsRtlOplockFsctrlEx。
Irp 参数指向的 IRP 必须是 IRP_MJ_FILE_SYSTEM_CONTROL 或 IRP_MJ_CREATE 操作的有效 IRP。
如果 IRP 是IRP_MJ_FILE_SYSTEM_CONTROL请求,FsRtlOplockFsctrlEx 可以与以下 FSCTL 代码之一一一起使用,该代码在 IrpSp-Parameters.FileSystemControl.FsControlCode> 中设置:
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
- FSCTL_REQUEST_OPLOCK
有关这些 FSCL 和机会锁的一般信息,请参阅Microsoft Windows SDK文档。
如果 IRP 是IRP_MJ_CREATE请求,则 FsRtlOplockFsctrlEx 可用于请求挂起的筛选器 oplock(如果满足以下所有条件):
- OpenCount 参数的值必须为 1。
- 必须FILE_READ_ATTRIBUTES IRP_MJ_CREATE请求的 DesiredAccess 参数的值。
- 必须FILE_SHARE_READ IRP_MJ_CREATE请求的 ShareAccess 参数的值 |FILE_SHARE_WRITE |FILE_SHARE_DELETE。
如果授予对挂起的筛选器 oplock 的请求, FsRtlOplockFsctrlEx 将返回STATUS_SUCCESS。 有关创建参数的详细信息,请参阅 IRP_MJ_CREATE的参考条目。
调用此函数的筛选器和文件系统必须将调用同步到系统提供的 oplock 包中。 有关详细信息 ,请参阅 Oplock 同步 。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | FsRtlOplockFsctrlEx 例程从 Windows 7 开始可用。 |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
另请参阅
FSCTL_OPBATCH_ACK_CLOSE_PENDING