4
我正在开发一个应用程序,它需要复制被锁定的文件。我打算在Windows XP +中使用卷影复制服务,但我遇到了实现问题。C++中的卷影复制
当我尝试调用CreateVssBackupComponents()
时,我正在获取E_ACCESSDENIED,我认为这是因为没有备份权限,所以我正在调整进程权限令牌以包含SE_BACKUP_NAME成功,但仍然出现错误。
到目前为止我的代码(为了简洁检查删除错误):
CoInitialize(NULL);
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &luid);
NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = luid;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &NewState, 0, NULL, NULL);
IVssBackupComponents *pBackup = NULL;
HRESULT result = CreateVssBackupComponents(&pBackup);
// result == E_ACCESSDENIED at this point
pBackup->InitializeForBackup();
<snip>
谁能帮助我或点我在正确的方向?在卷影复制服务上,Google的使用时间几乎没有变化。
感谢, Ĵ
感谢您的输入,好像我是不检查的错误代码来自AdjustTokenPrivileges()并错误地假定非零响应是确定的。 GetLastError()正在返回SE_BACKUP_NAME的ERROR_NOT_ALL_ASSIGNED,这似乎是问题所在。有没有在Windows 7中启用此权限而无需以管理员身份运行? – JWood 2010-10-28 09:35:25