中止 VSS 操作

在以下任一情况下,可以在备份操作期间生成 Abort 事件:

还原操作不支持中止。

Abort 事件的请求者处理和创建

IVSSBackupComponents 接口的实例只能用于一个备份,因此,如果处理备份时出错,最好释放当前实例并重新开始。

仅在实际备份准备、涉及编写器或创建卷影副本之后,请求者才应显式指明它正在中止备份作(使用 IVssBackupComponents::AbortBackup)。

实际上,这意味着每当请求者通过调用 IVssBackupComponents::PrepareForBackup生成 PrepareForBackup 事件后,需要停止备份操作时,应调用 IVssBackupComponents::AbortBackup,并在释放当前 IVSSBackupComponents 实例之前等待其返回。

例如,如果编写器否决了备份作,则请求者应使用 IVssBackupComponents::AbortBackup 来通知所有其他编写器备份作不会完成。

在调用 PrepareForBackup之前,或者调用 PrepareForBackup 失败,则请求者可以释放 IVSSBackupComponents 接口的当前实例,而无需生成中止事件。

例如,如果 IVSSBackupComponents 的当前实例仅用于通过调用 IVssBackupComponents::GatherWriterMetadata 获取信息并生成一个 Identify 事件,一旦返回信息,则只需释放 IVSSBackupComponents 实例。

当请求方调用 IVssBackupComponents::D oSnapshotSet时,请求者将生成许多事件(PrepareForSnapshot冻结解冻PostSnapshot)。 处理 Freeze 和 Thaw 事件时,编写器可能会失败,并且可能会自行生成 Abort 事件。 未能处理 PrepareForSnapshot 和 PostSnapshot 事件不会生成中止事件。

IVssBackupComponents::DoSnapshotSet 指示失败时,请求者并不总是能够知道是否生成了 Abort 事件。 因此,若请求者因 IVssBackupComponents::DoSnapshotSet 状态指明问题而需要终止备份操作,请求者仍应调用 IVssBackupComponents::AbortBackup

如果请求者已调用 IVssBackupComponents::AbortBackup,则无需在发布 IVSSBackupComponents实例之前调用 IVssBackupComponents::BackupComplete

Abort 事件的编写器处理和创建

如前所述,编写器可以从请求方接收中止事件,也可以由提供程序自行触发中止事件。 此外,在某些情况下,编写器可能会收到多个 Abort 事件。 编写器开发人员应根据这一点编码 CVssWriter::OnAbort 的任何实现。

在处理 Abort 事件时,编写器应尝试将自身管理的任何进程还原到其正常运行状态,以及执行任何错误处理和日志记录。

这可能意味着 CVssWriter::OnAbort 的实现可能需要执行许多任务,如果不是全部,则可能需要执行与 Thaw 事件处理程序(CVssWriter::OnThaw)和 PostSnapshot 事件处理程序(CVssWriter::OnPostSnapshot)相同的任务,而这些处理程序可以在 CVssWriter::OnAbort的实现中调用。