确定编写器状态

请求者在进行影子复制创建以及备份和恢复操作期间,需要对参与其中的写入者的状态有明确的了解。 为此,建议执行以下操作:

IVssBackupComponents::PrepareForBackup

IVssBackupComponents::DoSnapshotSet

IVssBackupComponents::BackupComplete

在还原操作期间,请求者应在完成以下方法后对编写器进行查询:

IVssBackupComponents::PreRestore

IVssBackupComponents::PostRestore

  • 调用 IVssBackupComponents::GatherWriterStatus 不属于定义完善的备份或还原序列,不会提供编写器状态的可靠图片,因为它们可能反映当前操作中未指示失败的条件,例如:
    • 以前的影子副本创建失败
    • 早期备份或还原操作中的错误
    • 无响应的编写器正在处理事件

因此,开发人员不应依赖请求方以外的其他进程返回的编写器状态,也不应尝试通过另一个(可能是单独线程中的)IVssBackupComponents 接口实例来监控其进度。

请注意,对于需要检查写入器的写入器元数据文档的备份操作,在生成和处理由 IVssBackupComponents::GatherWriterMetdata 引起的 Identify 事件后,请求者无需调用 IVssBackupComponents::GatherWriterStatusIVssBackupComponents::GetWriterStatus

IVssBackupComponents::GetWriterStatus 仅报告由编写者 Identify 事件处理程序 VSS 提供给 VSS 的编写器的状态,CVssWriter::OnIdentify(并通过 IVssBackupComponents::GetWriterMetadataCountIVssBackupComponents::GetWriterMetadata 返回给请求者)。

如果编写器实现 CVssWriter::OnIdentify 失败,则该编写器的元数据将不会是提供给 VSS 的编写器元数据文档列表的一部分,从而不会提供任何状态信息,并且调用将是多余的。

对于还原操作,如果请求者不需要检查正在执行的编写器的编写器元数据文档,调用 IVssBackupComponents::GatherWriterStatusIVssBackupComponents::GetWriterStatus 可能是确定正在执行哪些编写器的有效方法。