CVssWriter::OnFreeze 方法 (vswriter.h)

在卷影复制冻结开始时收到 Freeze 事件时,编写器会调用 OnFreeze 方法。 编写器使用此方法执行参与冻结或否决冻结所需的操作。

OnFreeze 是一种纯虚拟方法。 它不是由 CVssWriter 基类实现的,必须由派生类实现。

语法

bool OnFreeze();

返回值

此方法的实现必须返回 true ,出现严重错误时除外。 如果发生严重错误,方法必须调用 CVssWriter::SetWriterFailure 方法,以在返回 false 之前提供失败说明。 如果发生非严重错误,该方法仍应调用 SetWriterFailure ,但返回 true。 如果错误是由暂时性问题引起的,则 方法应在对 SetWriterFailure 的调用中指定VSS_E_WRITERERROR_RETRYABLE。

在发生故障的所有情况下,方法都应将事件写入事件日志,以报告失败的确切原因。

注解

在此方法中,编写器应用程序应将自身置于与 VSS 操作兼容的定义完善的状态。

在此方法中,编写器应完成支持创建卷影副本的最终准备工作。 创建卷影副本后,编写器将收到 Thaw 事件,并且可以继续正常操作。

默认情况下,冻结和解冻事件之间的超时窗口为 60 秒。 也就是说,如果通过超时窗口未收到 Thaw 事件,则将生成中止事件。 编写器可以通过将 dwTimeoutFreeze 参数设置为 CVssWriter::Initialize,在初始化时更改超时窗口。

编写器如何准备卷影副本高度依赖于托管卷影副本的应用程序。 某些应用程序可以保留所有写入操作,并使数据在此时间段内保持绝对一致状态。 其他应用程序(如许多数据库)在此期间无法停止工作,但可以采取措施(例如检查其状态),这可能会减少在此时段创建的卷影副本的恢复时间。

如果编写器无法将自身置于明确定义的冻结状态,则会发生以下情况:

  1. OnFreeze 应返回 false,并否决卷影副本。
  2. 编写器调用 CVssWriter::SetWriterFailure 来提供失败说明。
  3. OnFreeze 返回 false 时将生成中止事件
编写器绝不应从此方法或任何其他 CVssWriter (Ex) ::OnXxx 回调方法引发异常。

与处理 PrepareForSnapshot 事件的超时窗口相比,处理 Freeze 事件的超时窗口通常相对较短。 因此,开发人员应避免此方法中的冗长操作。 典型的用途可能是暂停编写器的日志记录。

建议由 CVssWriter::OnPrepareSnapshot 处理所有耗时的操作。

CVssWriter::OnThawCVssWriter::OnAbort 将在此方法之后调用。

如果此方法调用 CVssWriterEx2::GetSessionIdCVssWriter::SetWriterFailureCVssWriterEx2::SetWriterFailureEx 方法 ,则必须在调用此方法的同一线程中执行此操作。 有关详细信息,请参阅 编写器事件处理

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 vswriter.h (包括 Vss.h、VsWriter.h)
Library VssApi.lib

另请参阅

CVssWriter

CVssWriter::OnAbort

CVssWriter::OnPreRestore

CVssWriter::OnPrepareBackup

CVssWriter::OnPrepareSnapshot

CVssWriter::OnThaw

CVssWriter::SetWriterFailure