Я разрабатываю приложение, которое нужно будет скопировать заблокированные файлы. Я намерен использовать службу теневого копирования томов в Windows XP +, но у меня возникла проблема с реализацией.Том теневой копии в C++
В настоящее время я получаю E_ACCESSDENIED при попытке позвонить CreateVssBackupComponents()
, который, как я полагаю, не имеет привилегий резервного копирования, поэтому я корректирую токен привилегий процесса, чтобы включить 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 Chrome очень мало проявились в службе теневого копирования томов.
Спасибо, J
Спасибо за вход, кажется, я не проверял код ошибки из AdjustTokenPrivileges() и ошибочно полагал, что ненулевой ответ был в порядке. GetLastError() возвращает ERROR_NOT_ALL_ASSIGNED для SE_BACKUP_NAME, который, как представляется, является проблемой. Нужно ли разрешать эту привилегию в Windows 7 без запуска в качестве администратора? – JWood