基本 TxF 概念

读取隔离

事务 NTFS (TxF) 提供读取提交的一致性。

事务处理编写器是指使用不属于泛型读取访问权限但属于泛型写入访问权限的任何权限打开的事务处理文件句柄。 事务处理编写器查看文件的最新版本,该文件包含同一事务的所有更改。 每个文件只能有一个事务处理编写器。 即使使用共享写入权限打开文件,非事务处理编写器也始终被事务处理编写器阻止。

事务读取器是指使用属于泛型读取访问权限的一部分但不属于泛型写入访问权限的任何权限打开的事务处理文件句柄。 事务处理读取器查看打开文件句柄时存在的已提交文件版本。 事务处理读取器与事务处理编写器的影响隔离开来。 这仅在文件句柄的生命周期内提供文件的一致视图,并阻止非事务写入器。

注意

当已打开句柄以使用 CreateFileTransacted 函数进行修改时,无论系统是否将只读还是未转换为事务处理编写器,以用于隔离和其他事务语义时,在该事务中所有后续打开的文件。 这意味着,在打开句柄进行只读访问时,句柄在事务开始之前不会收到文件的视图;它接收文件的活动事务视图。

在提交事务之前,非事务处理的文件句柄不会在事务中看到任何更改。 非事务处理文件句柄接收与事务处理读取器类似的独立视图,但与事务处理读取器不同,当事务处理编写器提交事务时,它会收到文件更新。

隔离级别

TxF 提供读取提交的隔离。 这意味着不会在事务外部看到文件更新。 此外,如果在事务中读取文件时多次打开文件,则可能会看到每个后续打开的结果不同。 首次访问文件时可用的文件可能无法 (,因为它们已删除) ,反之亦然。

事务锁定

在文件上创建事务处理编写器可 事务性锁定 文件。 事务锁定文件后,尝试修改事务锁定事务的外部其他文件系统操作会失败 ,ERROR_SHARING_VIOLATIONERROR_TRANSACTIONAL_CONFLICT

下表汇总了事务锁定。

当前打开的文件

打开的文件尝试者

成交的客户

非事务处理

读取器

读者/编写器

读取器

读者/编写器

事务处理读取者

否2

Transacted Reader/Writer

否2

否2

非事务读取器

非事务读取器/编写器

否1

否1

  1. 失败并显示 ERROR_TRANSACTIONAL_CONFLICT
    2. 失败并显示 ERROR_SHARING_VIOLATION

如果为正在使用事务的修改打开命名流,则需要锁定整个文件。

除了事务锁定之外,典型的 NTFS 文件共享规则也适用。

需要并行考虑以下两种文件共享模式:

  • 事务锁定模式。
  • 普通文件共享模式。

无论哪种模式都更具限制性,都是适用的模式。