BackupWrite:在重新分析点上拒绝访问

BackupWrite: access denied on reparse points

我正在使用 BackupRead 和 BackupWrite 实现 2 个文件夹之间的文件同步。

我可以毫无问题地在文件和文件夹上使用它们。但是当我想在重新分析点上使用它们时,BackupWrite 失败并出现 access denied 错误。

使用 BackupRead 检索原始重分析点时没有错误。缓冲区有 2 个流:一个用于安全数据,一个用于重新解析数据。我可以在后者中看到重新分析点的目标。 我要创建的文件不存在 FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT 传递给 CreateFile。

所以,我的问题是:如何打开一个文件,让BackupWrite成功还原一个重解析点?

我终于找到了 2 个问题:

  • 如果重解析点用于目录,则必须首先将新的重解析点创建为目录。

  • 我们需要为当前进程启用"SeRestorePrivilege"或"SeCreateSymbolicLinkPrivilege"(通过OpenProcessToken、LookupPrivilegeValue和AdjustTokenPrivileges),即使已经授予了管理权限。