检查IRP_MJ_SET_INFORMATION操作的 Oplock 状态

以下IRP_MJ_SET_INFORMATION操作检查 oplock 状态:

  • FileEndOfFileInformation
  • FileAllocationInformation
  • FileValidDataLengthInformation
  • FileRenameInformation
  • FileShortNameInformation
  • FileLinkInformation
  • FileDispositionInformation

检查 FileEndOfFileInformation、FileAllocationInformation 和 FileValidDataLengthInformation 操作的 oplock 状态

当对文件或流执行以下操作时,此信息适用:

  • 调用方尝试更改流的逻辑大小。 请注意,当缓存管理器的惰性编写器线程尝试设置文件的新端时,不会进行 oplock 检查。 这是因为之前在收到实际写入请求时会生成检查。

  • 调用方尝试更改流的分配大小。

级别 2 请求类型的条件

  • 始终中断为 None。

  • 无需确认;操作会立即继续。

所有其他请求类型的条件

  • 当操作发生在具有 oplock 的FILE_OBJECT上时,FileEndOfFileInformation、FileAllocationInform) ation、FileAllocationInformation 和 FileValidDataLengthInformation IRP_MJ_SET_INFORMATION (中断,该操作与拥有 oplock 的FILE_OBJECT的键不同。 如果 oplock 中断,则中断为 None。

  • 确认要求有所不同,如下所示:

    • 读取请求:无需确认;操作会立即继续。

    • Read-Handle 请求:尽管需要确认中断,但操作会立即 (继续,即无需等待确认) 。

    • 级别 1、Batch、Filter、Read-Write 和 Read-Write-Handle 请求:在操作继续之前,必须收到确认。

检查 FileRenameInformation、FileShortNameInformation 和 FileLinkInformation 操作的 oplock 状态

当对文件或流执行以下操作时,此信息适用:

  • 正在重命名文件或流。

  • 正在为文件设置短名称。

  • 正在为文件创建硬链接。 如果新的硬链接取代了其他文件的现有链接,并且被取代的链接上存在 oplock,则会影响 oplock 状态。

  • 正在重命名 oplock 所在的流的上级目录,或者正在设置上级目录的短名称。

级别 1、级别 2、读取和 Read-Write 操作的条件

  • oplock 未中断。

  • 无需确认,操作会立即继续。

Batch、Filter、Read-Handle 和 Read-Write-Handle 操作的条件

  • 当操作发生在具有 oplock 键的FILE_OBJECT上时,FileRenameInformation、FileShortNameInformation 和 FileLinkInformation) 的IRP_MJ_SET_INFORMATION (中断,而 oplock 键与拥有 oplock 的FILE_OBJECT的键不同。 如果 oplock 中断:

    • Batch 和 Filter 请求中断为 None。

    • Read-Handle 请求中断为 Read。

    • Read-Write-Handle 请求中断为 Read-Write。

  • 在操作继续之前,必须收到确认。

检查 FileDispositionInformation 操作的 oplock 状态

当调用方尝试删除文件时,此信息适用。

  • 当操作在具有 oplock 键的FILE_OBJECT上发生时,FileDispositionInformation) 的IRP_MJ_SET_INFORMATION (中断,而 oplock 键与拥有 oplock 的FILE_OBJECT的键不同,并且FILE_DISPOSITION_INFORMATIONDeleteFile 为 TRUE**。 如果 oplock 中断:

    • Read-Handle 请求中断为 Read。

    • Read-Write-Handle 请求中断为 Read-Write。

  • 在操作继续之前,必须收到确认。