CreateFile返回ERROR_ACCESS_DENIED,而不管FILE_FLAG_BACKUP_SEMANTIC



我正在开发一个需要从磁盘备份文件的Windows备份应用程序(混合Go/C++(。

我的应用程序

  1. 在"Backup Operators"组中以用户身份运行,并且在secpol.msc中明确启用了"备份文件和目录">
  2. 调用OpenProcessToken()AdjustTokenPrivileges()为整个进程授予SeBackupPrivilege,成功
  3. 成功获取磁盘的VSS快照
  4. 遍历VSS快照中的所有文件,然后按如下方式尝试备份它们:

    CreateFile( path, GENERIC_READ, FILE_SHARE_READ, NULL, // SecurityAttributes OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_SEQUENTIAL_SCAN NULL // TemplateFile );

  5. 调用BackupRead()读取文件流。

这通常工作正常,并且我可以成功读取我的用户帐户通常被拒绝读取访问的文件(例如C:WindowsSystem32configsystemprofile(。

但尽管如此,一些"顽固"文件仍然会出现错误,从CreateFile:0x5ERROR_ACCESS_DENIED("访问被拒绝"(。

我知道那些"顽固"的文件不是重分析点。

这些文件存在于本地、内部连接的SATA、NTFS磁盘驱动器上,而不是网络驱动器或任何外来的驱动器。

"顽固"文件都是文件,而不是目录。

它们是一系列文件类型(docx、fla、swf、.DS_Store…(。

除了防病毒程序之外,没有安装任何特殊的安全软件。

竞争对手的备份软件能够毫无错误地备份这些文件。

为什么会发生这种情况

此错误可能是由EFS加密文件引起的,该文件不存在密钥。

在这种情况下,CCD_ 10在任何情况下都是不可能的。

相关内容

  • 没有找到相关文章

最新更新