Windows VSS (Volume Shadow Copy) в C ++ - PullRequest
       30

Windows VSS (Volume Shadow Copy) в C ++

1 голос
/ 13 апреля 2011

Мне нужна помощь с настройкой VSS для работы в C ++. Моя основная цель - отсканировать папку на наличие измененных файлов (по дате изменения) и затем скопировать их на другое устройство с помощью VSS. Документация неясна (по крайней мере для меня) о том, как я могу это сделать, и я не могу найти достойных примеров того, как это сделать.

Мой процесс должен работать так:

Папка сканируется и создается список измененных файлов. Снимок VSS создан и файлы скопированы. Снимок VSS сбрасывается или освобождается (или что-либо еще).

Вот что у меня есть (обработка ошибок удалена для краткости):

VSS_SNAPSHOT_PROP snapshotProperties;
::CoInitialize(NULL);
::CreateVssBackupComponents(&m_pBackupComponents);
m_pBackupComponents->InitializeForBackup();
m_pBackupComponents->StartSnapshotSet(&m_SnapshotSetId);
m_pBackupComponents->AddToSnapshotSet(wszVolumePathName, GUID_NULL, &snapshotId);
m_pBackupComponents->SetBackupState(TRUE, FALSE, VSS_BT_FULL, FALSE);
m_pBackupComponents->PrepareForBackup(&pPrepareForBackupResults);
pPrepareForBackupResults->Wait();
m_pBackupComponents->DoSnapshotSet(&pDoSnapshotSetResults);
m_pBackupComponents->GetSnapshotProperties(snapshotId, &snapshotProperties); <-- Never gets beyond here

Хорошо, похоже, это правильный метод, но поток копирования останавливается на последней строке кода и больше не идет.

Спасибо, J

РЕДАКТИРОВАТЬ: Обновлено, чтобы показать новый метод, который останавливается на GetSnapshotProperties()

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

После DoSnapshotset вам нужно вызвать следующую функцию

hr = pDoSnapshotSetResults-> Wait ();if (! SUCCEEDED (hr)) {unLoadLibrary ();возврат 1;}

    HRESULT hrDoSnapshotSetResults;

    hr = pDoSnapshotSetResults->QueryStatus(&hrDoSnapshotSetResults, NULL);
    if (!SUCCEEDED(hr)){    unLoadLibrary(); return 1;  }

как только эта функция окажется успешной, вы можете получить свойства снимка.

0 голосов
/ 13 апреля 2011

Экземпляры VSS_SNAPSHOT_PROP извлекаются через вызов GetSnapshotProperties (). Вам нужно создать новый набор, вызвав StartSnapshotSet (), а затем добавить том в набор снимков с помощью AddToSnapshotSet (), прежде чем получить свойства.

...