VSS_RESTOREMETHOD_ENUM 枚举 (vswriter.h)

编写器在备份时使用 VSS_RESTOREMETHOD_ENUM 枚举,以通过其编写器元数据文档指定默认文件还原方法,以用于其管理的所有组件中的所有文件。

还原方法是编写器范围的,也称为原始还原目标,由 VSS_RT_ORIGINAL VSS_RESTORE_TARGET指示。

语法

typedef enum VSS_RESTOREMETHOD_ENUM {
  VSS_RME_UNDEFINED = 0,
  VSS_RME_RESTORE_IF_NOT_THERE,
  VSS_RME_RESTORE_IF_CAN_REPLACE,
  VSS_RME_STOP_RESTORE_START,
  VSS_RME_RESTORE_TO_ALTERNATE_LOCATION,
  VSS_RME_RESTORE_AT_REBOOT,
  VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE,
  VSS_RME_CUSTOM,
  VSS_RME_RESTORE_STOP_START
} ;

常量

 
VSS_RME_UNDEFINED
值: 0
未定义还原方法。


这表示编写器部分出错。

快速编写器不支持此值。
VSS_RME_RESTORE_IF_NOT_THERE
仅当没有 版本时,请求者才应还原所选组件或组件集的文件
磁盘上当前存在的那些文件。


除非为文件还原定义了备用位置映射,否则如果由 管理的任何文件的版本
所选组件或组件集当前位于磁盘上,没有由所选文件管理
应还原组件或组件集。

如果定义了文件的备用位置映射,并且文件的某个版本位于 的磁盘上
原始位置,仅当文件版本不存在时,才应将文件写入备用位置
备用位置。
VSS_RME_RESTORE_IF_CAN_REPLACE
仅当磁盘上的当前文件可以覆盖时,请求者才应还原所选组件或组件集的文件。


除非为文件还原定义了备用位置映射,否则存在任何文件的版本
不能覆盖磁盘上的所选组件或组件集,任何文件均由
应还原组件或组件集。

如果定义了文件的备用位置映射,则应将文件写入备用位置。
VSS_RME_STOP_RESTORE_START
请求者应按如下所示执行还原操作:


  1. 发送 PreRestore 事件并等待所有编写器处理它。

  2. 停止服务。

  3. 将文件还原到其原始位置。

  4. 重启服务。

  5. 发送 PostRestore 事件并等待所有编写器处理它。


要停止的服务在调用 IVssCreateWriterMetadata::SetRestoreMethod 方法时预先指定编写器。 请求者可以通过调用 IVssExamineWriterMetadata::GetRestoreMethod 方法获取服务的名称。

请注意,如果编写器托管在正在停止的服务中,该编写器将不会收到 PostRestore 事件,因为当服务停止并重新启动时,编写器实例 ID 会更改。
VSS_RME_RESTORE_TO_ALTERNATE_LOCATION
请求者应将所选组件或组件集的文件还原到 指定的位置
编写器组件元数据文件中指定的备用位置映射。 (有关详细信息,请参阅
IVssCreateWriterMetadata::AddAlternateLocationMapping
IVssComponent::GetAlternateLocationMapping
IVssExamineWriterMetadata::GetAlternateLocationMapping
IVssWMFiledesc::GetAlternateLocation.)

快速编写器不支持此值。
VSS_RME_RESTORE_AT_REBOOT
计算机重启后,请求者应还原所选组件或组件集的文件。


应将要还原的文件复制到临时位置,并且请求者应使用
MoveFileEx
MOVEFILE_DELAY_UNTIL_REBOOT 标志完成这些文件的还原
重启计算机后的正确位置。
VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE
如果可能,请求者应将所选组件或组件集的文件还原到正确的
立即位置。


如果磁盘上设置了由所选组件或组件管理的任何文件版本,
无法覆盖,则应还原由所选组件或组件集管理的所有文件
重启计算机后。

在这种情况下,要还原的文件应复制到磁盘上的临时位置,请求者应
MoveFileEx 与 结合使用
MOVEFILE_DELAY_UNTIL_REBOOT 标志完成这些文件的还原
重启计算机后的正确位置。
VSS_RME_CUSTOM
请求者应使用自定义还原方法来还原由所选文件管理的文件
组件或组件集。


自定义还原可能使用文件检索 API 函数或对给定编写器专用的协议
配置单一登录。 此类还原不需要使用编写器组件元数据文件中的信息。 (有关详细信息,请参阅
更多自定义备份和还原
information.)

快速编写器不支持此值。
VSS_RME_RESTORE_STOP_START
请求者应按如下所示执行还原操作:


  1. 发送 PreRestore 事件并等待所有编写器处理它。

  2. 将文件还原到其原始位置。

  3. 发送 PostRestore 事件并等待所有编写器处理它。

  4. 停止服务。

  5. 重启服务。


要停止的服务由编写器在调用 IVssCreateWriterMetadata::SetRestoreMethod 方法时预先指定。 请求者可以通过调用 IVssExamineWriterMetadata::GetRestoreMethod 方法获取服务的名称。

注解

编写器通过在备份期间调用 IVssCreateWriterMetadata::SetRestoreMethod 来设置编写器元数据文档中的还原方法,以在其元数据中指定所需的还原方法。

请求者通过调用 IVssExamineWriterMetadata::GetRestoreMethod 检索编写器请求的还原方法,并相应地执行操作。

还原方法适用于给定编写器的所有组件中的所有文件。

如果编写器使用IVssComponent::SetRestoreTarget 设置VSS_RT_ORIGINAL以外的VSS_RESTORE_TARGET值,则还原方法可能会在还原时逐个重写。

未定义备用位置映射 的VSS_RME_RESTORE_TO_ALTERNATE_LOCATION 还原方法将构成编写器错误,请求者应进行报告。

如果还原方法需要检查磁盘上当前 (VSS_RME_RESTORE_IF_NOT_THEREVSS_RME_RESTORE_IF_CAN_REPLACEVSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE) 的文件的状态,理想情况下,应使用文件 I/O 操作验证是否可以还原整个组件,然后再实际继续还原。

执行此操作的最安全方法是在还原之前使用 CreateFile 以独占方式打开 (无共享) 所有目标文件。

对于 VSS_RME_RESTORE_IF_NOT_THERE,还应设置 CREATE_NEW 的创建处置标志。

如果打开操作成功,还原可以继续,并且应使用 CreateFile 返回的句柄将还原的数据实际写入磁盘。

否则,可能会返回错误(具体取决于方法),或者选中并 (备用位置映射(如果可用) 使用)或在下次重新启动时暂还原的组件文件。

对于非常大的组件来说,这可能是一个问题, (其中一些组件可能) 成千上万个文件,因为系统开销。

在这种情况下,一个不太可靠的可用选项是执行以下操作:

  1. 复制磁盘上当前要还原到临时缓存的所有文件。
  2. 尝试将当前位于磁盘上的文件替换为备份文件 (这些文件可能位于第二个临时区域中的磁盘上,或者位于备份介质) 上。
  3. 如果任何文件无法还原,请终止还原操作,并从其临时位置复制原始文件,并继续执行备用位置映射或在重新启动操作时还原。
有关 VSS 下的备份和还原文件位置的详细信息,请参阅 非默认备份和还原位置

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 vswriter.h

另请参阅

IVssBackupComponents::AddAlternativeLocationMapping

IVssComponent::GetAlternateLocationMapping

IVssCreateWriterMetadata::AddAlternateLocationMapping

IVssCreateWriterMetadata::SetRestoreMethod

IVssExamineWriterMetadata::GetAlternateLocationMapping

IVssExamineWriterMetadata::GetRestoreMethod

IVssWMFiledesc::GetAlternateLocation

VSS_WRITERRESTORE_ENUM