从ReplaceFile重现ERROR_UNABLE_TO_MOVE_REPLACEMENT_2错误代码

Wes*_*ill 5 windows error-handling winapi error-code

我使用ReplaceFile Win32函数作为获取原子行为的操作的一部分.

在该函数的三个特殊错误代码中,我已经能够从两个重现和恢复(回滚):ERROR_UNABLE_TO_MOVE_REPLACEMENT和ERROR_UNABLE_TO_REMOVE_REPLACED.

我的问题与第三个错误代码有关:ERROR_UNABLE_TO_MOVE_REPLACEMENT _2.

  1. 有没有人看到这个错误代码返回?在什么条件下可能?
  2. 有关如何重新生成此错误的任何想法,以便我可以测试从我的代码中恢复的路径?
  3. 我从文档中收集到要从此错误中恢复(回滚),我需要将替换后的文件重命名为其原始名称,因为ReplaceFile会将其留下备份文件名.任何人都可以验证这实际上是ReplaceFile离开文件的状态吗?

如果有帮助,可以提供更多细节:

  • 使用非NULL备份文件名调用ReplaceFile(实际上,如果给出NULL备份名称,则不会发生ERROR_UNABLE_TO_MOVE_REPLACEMENT_2).
  • 我还传递了REPLACEFILE_WRITE_THROUGH标志.
  • 这些文件都存在于同一个NTFS卷上.

Eri*_*own 1

ERROR_UNABLE_TO_MOVE_REPLACEMENT_2当属性和辅助数据流已附加到替换文件,但主文件本身无法替换时,会发生这种情况。

您关于恢复的假设是正确的。