ロックされたファイルをコピーする必要があるアプリケーションを開発しています。Windows XP+ でボリューム シャドウ コピー サービスを使用するつもりですが、実装で問題が発生しています。
現在、呼び出しを試みたときに 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>
誰かが私を助けたり、正しい方向に向けたりできますか? ボリューム シャドウ コピー サービスでは、グーグルで検索した時間はほとんどありません。
ありがとう、J