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 类型的信息,请参阅 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指示已授予请求的筛选器操作锁。 对于 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_CONTROLIRP_MJ_CREATE 操作的有效 IRP。

如果 IRP 是一个 IRP_MJ_FILE_SYSTEM_CONTROL 请求,FsRtlOplockFsctrlEx 可与以下 FSCTL 代码之一配合使用,该代码在 IrpSp->Parameters.FileSystemControl.FsControlCode中设置:

有关这些 FSCTL 和一般机会锁的详细信息,请参阅 Microsoft Windows SDK 文档。

如果 IRP 是IRP_MJ_CREATE请求,FsRtlOplockFsctrlEx 可用于请求挂起的筛选器 oplock(如果满足以下所有条件):

  • OpenCount 参数的值必须为 1。
  • IRP_MJ_CREATE请求的 DesiredAccess 参数的值必须FILE_READ_ATTRIBUTES。
  • IRP_MJ_CREATE请求的 ShareAccess 参数的值必须FILE_SHARE_READ |FILE_SHARE_WRITE |FILE_SHARE_DELETE。

如果授予挂起筛选器 oplock 的请求,FsRtlOplockFsctrlEx 返回STATUS_SUCCESS。 有关创建参数的详细信息,请参阅 IRP_MJ_CREATE的参考条目。

调用此函数的筛选器和文件系统必须将调用同步到系统提供的 oplock 包中。 有关详细信息,请参阅 Oplock 同步

要求

要求 价值
最低支持的客户端 从 Windows 7 开始,FsRtlOplockFsctrlEx 例程可用。
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltOplockFsctrl

FsRtlInitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL