C ++中的Windows VSS(卷影复制)

| 我需要一些使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
好的,这似乎是正确的方法,但是复制线程冻结在代码的最后一行,并且再也没有得到进一步的解决。 谢谢, Ĵ 编辑:更新以显示在which1处停止的新方法     
已邀请:
在DoSnapshotset yu之后,必须调用以下函数 hr = pDoSnapshotSetResults-> Wait();         如果(!SUCCEEDED(hr)){unLoadLibrary();返回1; }
    HRESULT hrDoSnapshotSetResults;

    hr = pDoSnapshotSetResults->QueryStatus(&hrDoSnapshotSetResults, NULL);
    if (!SUCCEEDED(hr)){    unLoadLibrary(); return 1;  }
一旦此功能成功完成,您就可以获取快照属性。     
VSS_SNAPSHOT_PROP实例通过对GetSnapshotProperties()的调用来检索。您需要通过调用StartSnapshotSet()创建一个新集,然后在获取属性之前通过AddToSnapshotSet()将卷添加到快照集中。     

要回复问题请先登录注册