【问题标题】:RegLoadKey to a hive file from within a Shadow copy [closed]RegLoadKey 从卷影副本中到配置单元文件 [关闭]
【发布时间】:2012-10-09 02:40:07
【问题描述】:

我正在创建一个卷影副本,我想使用 RegLoadKey() 从该卷影副本装载一个注册表配置单元,因此我使用正常的注册表函数检查其内容。
这通常工作得很好,除非在某些机器上根本不工作。

我创建卷影副本并获取其挂载点 - 类似于
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8
然后我打电话给

RegLoadKeyW(HKEY_LOCAL_MACHINE, "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\Windows\System32\config\SOFTWARE", "mntpoint");

此调用返回1009 - The configuration registry database is corrupt.

如果我使用CreateFileW(),我可以使用该路径成功打开此文件,因此它肯定存在。

我已确定卷影副本是使用注册表编写器创建的,所以我认为这不是问题。
如果我创建卷影副本并在重新启动后尝试此操作没有区别。
这只发生在某些机器上。大多数情况下它工作得很好。我不确定它无法在哪些机器上运行。
机器是windows 2008 64位的。

【问题讨论】:

  • 澄清一下,这在某些机器上始终有效,而在其他机器上始终失败?您可以确定任何常见因素吗?
  • 是的,两者都是一致的。如前所述,“我不确定它无法在哪些机器上运行”

标签: c windows registry backup shadow-copy


【解决方案1】:

原来问题是要使用RegLoadKeyW() 加载的配置单元需要在某个可写的地方。由于卷影副本是只读的,因此它失败了。
当我将挂载的文件复制到影子副本之外时,它工作正常。

【讨论】:

  • 您的解决方案永远无法与您的问题描述相匹配。您从未提及在“某些”情况下移动和/或更改其读/写状态的图像。
【解决方案2】:

您是在创建卷影副本的同一台机器上加载吗?

RegLoadKeyW() 的其中一条评论说:

有两种注册表配置文件格式。在当前操作系统上创建的注册表配置单元通常无法由早期操作系统加载。

【讨论】:

  • 想一想,这意味着升级后的操作系统可能会使用早期的注册表格式,或者更糟的是混合格式。 @shoosh,受影响的机器是否有可能是从以前版本的操作系统升级而来的?
  • 不,这是全新安装的原版机器
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多