Windows VSS(卷影拷贝)在c++中



我需要一些帮助,让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()

在DoSnapshotset之后,您必须调用以下函数

hr = pdosnapshotseresults ->Wait();if (!SUCCEEDED(hr)){unLoadLibrary();返回1;}

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

一旦这个函数是成功的,那么你可以得到快照属性

VSS_SNAPSHOT_PROP实例通过调用GetSnapshotProperties()来检索。您需要通过调用StartSnapshotSet()创建一个新集,然后在获得属性之前通过AddToSnapshotSet()将卷添加到快照集。

相关内容

  • 没有找到相关文章

最新更新