公开和显示卷影复制卷
除了通过 IVssBackupComponents 接口通过其副本 的设备对象进行访问外,请求者还可以将卷影副本作为装载的只读设备提供给其他进程。
此过程称为 公开卷影副本,并使用 IVssBackupComponents::ExposeSnapshot 方法执行。
卷影副本可以作为本地卷(分配有驱动器号或与装载的文件夹关联)或作为文件共享公开。
为了说明,请考虑在 F:\ 上装载的系统 exposedSys 上由卷组成的卷影副本其根目录为 dirOne 和 dirTwo,以及文件 FileOne。
在本地公开卷影副本
装载为本地卷时,卷影副本的根目录始终在装载点 (驱动器号或装载的文件夹) 可见,并且所有影子复制的文件都可见。
如果卷影副本是通过装载的文件夹 C:\ShadowOfF 在本地公开的,你会发现磁盘上存在的所有文件都装载在 F:\在 C:\ShadowOfF 下提供卷影副本时。 检查 C:\ShadowOfF 会发现 C:\ShadowOfF 下的两个目录(dirOne 和 dirTwo)以及一个文件 fileOne。
调用本地公开卷影副本可能是:
IVssBackupComponents *pReq;
VSS_ID snapID;
PWSTR wszExposed;
// .
// .
hr = pReg->ExposeSnapshot(
snapID, // VSS_ID SnapshotId,
NULL, // VSS_PWSZ wszPathFromRoot
VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY, // LONG lAttributes
L"C:\ShadowOfF", // VSS_PWSZ wszExpose
LPWSTR &wszExposed, // VSS_PWSZ* pwszExposed
);
如果卷影副本在本地成功公开, wszExposed 应包含宽字符串“C:\ShadowOfF”。
稍后可以通过调用 IVssBackupComponentsEx2::UnexposeSnapshot 来取消显示卷影副本。
只能在本地公开永久性卷影副本(即使用 VSS_CTX_NAS_ROLLBACK 或 VSS_CTX_APP_ROLLBACK 创建的卷影副本)。
将卷影副本公开为远程共享
或者,可以选择创建装载在 F:\ 处的磁盘的卷影副本可用作远程文件共享,并且仅将 dirTwo 下的数据公开为文件共享 dirTwoOfF。
在这种情况下,系统可以通过将 \\exposedSys\dirTwoOfF 映射为网络驱动器来访问 F:\dirTwo 下文件的卷影副本。
对实现远程公开卷影副本作为共享的调用可能如下所示:
IVssBackupComponents *pReq;
VSS_ID snapID;
LPWSTR wszExposed;
// .
// .
hr = pReg->ExposeSnapshot(
snapID, // VSS_ID SnapshotId,
L"\dirTwo", // VSS_PWSZ wszPathFromRoot
VSS_VOLSNAP_ATTR_EXPOSED_REMOTELY, // LONG lAttributes
L"dirTwoOfF", // VSS_PWSZ wszExpose
LPWSTR &wszExposed, // VSS_PWSZ* pwszExposed
);
如果卷影副本已成功远程公开, wszExposed 应包含宽字符串“dirTwoOfF”。
当前映射 dirTwoOfF 网络共享的任何系统都可以与它断开连接,就像它可能从任何普通共享断开连接一样。
显示卷影副本
表面阴影副本是系统装载管理器命名空间已知的卷影副本。
这意味着,你可以像查找任何其他可用但尚未装载的卷一样查找此类卷影副本,例如,使用 FindFirstVolume 和 FindNextVolume。
显然,公开的卷影副本也是表面阴影副本。 但是,情况不一定正确。
如果已卸载本地公开的卷影副本,或者系统选择断开远程公开的卷影副本的连接,则不再公开该卷影副本。 但是,只要卷影副本保留,卷就会浮出水面。 这意味着可以像任何其他只读卷一样装载它们。