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,在初始化时更改超时窗口。
编写器如何准备卷影副本高度依赖于托管卷影副本的应用程序。 某些应用程序可以保留所有写入操作,并使数据在此时间段内保持绝对一致状态。 其他应用程序(如许多数据库)在此期间无法停止工作,但可以采取措施(例如检查其状态),这可能会减少在此时段创建的卷影副本的恢复时间。
如果编写器无法将自身置于明确定义的冻结状态,则会发生以下情况:
- OnFreeze 应返回 false,并否决卷影副本。
- 编写器调用 CVssWriter::SetWriterFailure 来提供失败说明。
- OnFreeze 返回 false 时将生成中止事件
与处理 PrepareForSnapshot 事件的超时窗口相比,处理 Freeze 事件的超时窗口通常相对较短。 因此,开发人员应避免此方法中的冗长操作。 典型的用途可能是暂停编写器的日志记录。
建议由 CVssWriter::OnPrepareSnapshot 处理所有耗时的操作。
CVssWriter::OnThaw 或 CVssWriter::OnAbort 将在此方法之后调用。
如果此方法调用 CVssWriterEx2::GetSessionId、 CVssWriter::SetWriterFailure 或 CVssWriterEx2::SetWriterFailureEx 方法 ,则必须在调用此方法的同一线程中执行此操作。 有关详细信息,请参阅 编写器事件处理。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | vswriter.h (包括 Vss.h、VsWriter.h) |
Library | VssApi.lib |