确定编写器状态
请求者在进行影子复制创建以及备份和恢复操作期间,需要对参与其中的写入者的状态有明确的了解。 为此,建议执行以下操作:
请求者使用 IVssBackupComponents::GatherWriterStatus、IVssBackupComponents::GetWriterStatusCount 和 IVssBackupComponents::GetWriterStatus。
如 VSS 下处理备份的概述和在 VSS 下处理还原的概述中所述,在定义完善的备份或还原序列中进行调用时,这些方法最有用。 通常,这意味着在请求者完成其中一项任务并生成 VSS 事件后,应查询编写器。
处理备份时,请求者应在完成以下方法后查询编写器。 请求者必须在调用 BackupComplete 后调用 GatherWriterStatus,使编写器会话设置为已完成状态。
注意
这仅适用于 Windows Server 2008 with Service Pack 2 (SP2) 及更早版本。
IVssBackupComponents::PrepareForBackup
在还原操作期间,请求者应在完成以下方法后对编写器进行查询:
- 调用 IVssBackupComponents::GatherWriterStatus 不属于定义完善的备份或还原序列,不会提供编写器状态的可靠图片,因为它们可能反映当前操作中未指示失败的条件,例如:
- 以前的影子副本创建失败
- 早期备份或还原操作中的错误
- 无响应的编写器正在处理事件
因此,开发人员不应依赖请求方以外的其他进程返回的编写器状态,也不应尝试通过另一个(可能是单独线程中的)IVssBackupComponents 接口实例来监控其进度。
请注意,对于需要检查写入器的写入器元数据文档的备份操作,在生成和处理由 IVssBackupComponents::GatherWriterMetdata 引起的 Identify 事件后,请求者无需调用 IVssBackupComponents::GatherWriterStatus 和 IVssBackupComponents::GetWriterStatus。
IVssBackupComponents::GetWriterStatus 仅报告由编写者 Identify 事件处理程序 VSS 提供给 VSS 的编写器的状态,CVssWriter::OnIdentify(并通过 IVssBackupComponents::GetWriterMetadataCount 和 IVssBackupComponents::GetWriterMetadata 返回给请求者)。
如果编写器实现 CVssWriter::OnIdentify 失败,则该编写器的元数据将不会是提供给 VSS 的编写器元数据文档列表的一部分,从而不会提供任何状态信息,并且调用将是多余的。
对于还原操作,如果请求者不需要检查正在执行的编写器的编写器元数据文档,调用 IVssBackupComponents::GatherWriterStatus 和 IVssBackupComponents::GetWriterStatus 可能是确定正在执行哪些编写器的有效方法。