CreateFile returns ERROR_ACCESS_DENIED 尽管 FILE_FLAG_BACKUP_SEMANTICS
CreateFile returns ERROR_ACCESS_DENIED despite FILE_FLAG_BACKUP_SEMANTICS
我正在开发一个 Windows 备份应用程序(混合 Go / C++),需要从磁盘备份文件。
我的申请
- 作为 "Backup Operators" 组中的用户运行,并且在
secpol.msc
中明确启用 "Back up files and directories"
- 调用
OpenProcessToken()
和AdjustTokenPrivileges()
为整个过程授予SeBackupPrivilege
,成功
- 成功拍摄磁盘的 VSS 快照
遍历 VSS 快照中的所有文件,然后按如下方式尝试备份它们:
CreateFile(
path,
GENERIC_READ,
FILE_SHARE_READ,
NULL, // SecurityAttributes
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_SEQUENTIAL_SCAN
NULL // TemplateFile
);
调用BackupRead()
读取文件流。
这通常工作正常,我可以成功读取我的用户帐户通常被拒绝读取访问权限的文件(例如 C:\Windows\System32\config\systemprofile
)。
但是尽管如此,一些"stubborn"文件仍然报错,from CreateFile
: 0x5 ERROR_ACCESS_DENIED
("Access is Denied" ).
我知道 "stubborn" 文件不是重新分析点。
文件存在于本地、内部连接的 SATA、NTFS 磁盘驱动器上 - 不是网络驱动器或任何奇异的东西。
"stubborn"个文件都是文件,不是目录。
它们是一系列文件类型(docx、fla、swf、.DS_Store、...)。
除了防病毒程序外,没有安装特殊的安全软件。
竞争对手的备份软件能够无误地备份这些文件。
为什么会发生这种情况?
此错误可能是由 EFS 加密文件引起的,该文件没有密钥。
在这种情况下CreateFile
在任何情况下都是不可能的。
我正在开发一个 Windows 备份应用程序(混合 Go / C++),需要从磁盘备份文件。
我的申请
- 作为 "Backup Operators" 组中的用户运行,并且在
secpol.msc
中明确启用 "Back up files and directories"
- 调用
OpenProcessToken()
和AdjustTokenPrivileges()
为整个过程授予SeBackupPrivilege
,成功 - 成功拍摄磁盘的 VSS 快照
遍历 VSS 快照中的所有文件,然后按如下方式尝试备份它们:
CreateFile( path, GENERIC_READ, FILE_SHARE_READ, NULL, // SecurityAttributes OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_SEQUENTIAL_SCAN NULL // TemplateFile );
调用
BackupRead()
读取文件流。
这通常工作正常,我可以成功读取我的用户帐户通常被拒绝读取访问权限的文件(例如 C:\Windows\System32\config\systemprofile
)。
但是尽管如此,一些"stubborn"文件仍然报错,from CreateFile
: 0x5 ERROR_ACCESS_DENIED
("Access is Denied" ).
我知道 "stubborn" 文件不是重新分析点。
文件存在于本地、内部连接的 SATA、NTFS 磁盘驱动器上 - 不是网络驱动器或任何奇异的东西。
"stubborn"个文件都是文件,不是目录。
它们是一系列文件类型(docx、fla、swf、.DS_Store、...)。
除了防病毒程序外,没有安装特殊的安全软件。
竞争对手的备份软件能够无误地备份这些文件。
为什么会发生这种情况?
此错误可能是由 EFS 加密文件引起的,该文件没有密钥。
在这种情况下CreateFile
在任何情况下都是不可能的。