使用定向目标
定向目标机制允许编写器在还原时重新映射文件。 这样,编写器就可以执行以下操作:
- 指定新的目标位置 (类似于请求者的 IVssBackupComponents::AddNewTarget) 。
- 通过将文件的某些部分还原到磁盘来回收磁盘空间,尤其是在使用 部分文件 机制备份文件时。
- 更改文件格式以满足当前需求。
任何要用于定向目标操作的文件都必须具有VSS_RT_DIRECTED的 还原目标 。
确定请求者可以支持定向目标操作后,编写器 (处理 PreRestore 事件) 使用 IVssComponent::AddDirectedTarget 作为与管理) 文件 (或定义包含文件集的组件集的组件相对应的 IVssComponent ::AddDirectedTarget,用于定义文件在还原时重新映射的方式。
在使用 IVssComponent::AddDirectedTarget 时,编写器指定用于备份文件的文件名和路径、其还原目标的文件名和路径 (这些值可以与原始文件名和路径) 以及源和目标文件范围相同。
与部分文件操作一样,范围列表是文件中要备份的偏移量对,) 以字节为单位备份 (,节的长度) 以字节为单位 (还原,偏移量和长度由冒号分隔,每个配对用逗号分隔:Offset1**:Length1,** Offset2**:**Length2。 每个值都是 64 位整数,采用十六进制或十进制格式。
如果编写器需要使用定向目标机制将文件还原到新位置,则会调用具有原始文件名和路径的 IVssComponent::AddDirectedTarget 以及新的文件名和路径,并指定源目标范围,其偏移量为零,长度等于整个文件大小的长度。
例如,如果编写器需要具有 200K 文件,则 C:\WriterData\Index.dat 还原为 C:\WriterData\OldIndex.dat,则源和目标范围字符串将为“0:204880”。
若要重新映射大型部分备份的文件,请求者将使用用于备份文件的源范围和将减小文件大小的目标范围。 可以使用 IVssComponent::GetPartialFile 获取源范围信息,该实例对应于管理文件 (的组件或定义包含文件) 的组件集的组件。
如果部分备份的文件最初是一个大文件,其标头(字节 64-512)包含记录计数和其他经常更新的信息,并且其最新数据将在文件的最后 65536 个字节中找到(字节0x1239E8577A到0x1239E7577A),则编写器可以将源范围列表指定为字符串“64:448,0x1239E8577A:65536”。
如果编写器想要重新映射已还原的文件以仅包含标头和最新数据,范围列表可以是字符串“0:488,488:65536”。
在实际执行还原操作之前,请求者应检查是否有任何文件需要定向目标支持。
为此,请求方首先使用 IVssBackupComponents::GetWriterComponentsCount 和 IVssBackupComponents::GetWriterComponents::GetWriterComponents 在其备份组件文档中循环访问存储的编写器。
然后, IVssBackupComponents::GetWriterComponents 接口用于返回 IVssWriterComponentsExt 接口的实例,该接口提供 IVssWriterComponentsExt::GetComponent 和 IVssWriterComponentsExt::GetComponentCount 方法,这些实例允许请求者获取 IVssComponent 实例。
这允许请求者通过使用 IVssComponent::GetDirectedTargetCount 和 IVssComponent::GetDirectedTarget 作为对应于管理文件 (的组件或定义包含文件) 的组件集的组件获取定向目标候选项。