我正在创建一个影子副本,我想使用RegLoadKey()
从该影子副本中安装一个注册表,因此我使用普通注册表功能浏览其内容。
除了某些根本不起作用的机器外,这通常效果很好。
我创建阴影副本并获取其安装点 - 类似
\?GLOBALROOTDeviceHarddiskVolumeShadowCopy8
然后我打电话
RegLoadKeyW(HKEY_LOCAL_MACHINE, "\?GLOBALROOTDeviceHarddiskVolumeShadowCopy8WindowsSystem32configSOFTWARE", "mntpoint");
此呼叫返回1009 - The configuration registry database is corrupt.
如果我使用CreateFileW()
,我可以成功使用该路径打开此文件,因此它肯定在那里。
我已经确保使用注册表作者创建影子副本,所以我认为这不是问题。
如果我创建影子副本并在重新启动后尝试一下没有区别。
这仅发生在某些机器上。在大多数情况下,它可以正常工作。我不确定它无法使用的机器有什么区别。
机器是Windows 2008 64位。
事实证明,问题是要使用RegLoadKeyW()
加载的Hive需要在可写的地方。由于影子副本仅读取,因此失败了。
当我在阴影副本外复制安装的文件时,它可以正常工作。
您是否在创建阴影副本的同一台计算机上加载?
regloadKeyw()备注之一说:
有两种注册表hive文件格式。较早的注册表通常无法加载当前操作系统上的注册表。