我正在创建一个卷影副本,并且我想使用RegLoadKey()从该卷影副本装载一个注册表配置单元,因此我使用普通的注册表函数检查它的内容。
这通常工作得很好,除非在某些机器上它根本不能工作。
我创建了卷影副本并获得了它的挂载点-类似于
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8
然后我会打电话给
RegLoadKeyW(HKEY_LOCAL_MACHINE, "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\Windows\System32\config\SOFTWARE", "mntpoint");此调用返回1009 - The configuration registry database is corrupt.
如果我使用CreateFileW(),我可以使用该路径成功打开该文件,因此它肯定在那里。
我已经确定卷影副本是使用注册表编写器创建的,所以我认为这不是问题所在。
如果我创建卷影副本并在重新启动后尝试此操作,则没有区别。
这种情况只发生在某些机器上。在大多数情况下,它工作得很好。我不确定它不能工作的机器有什么不同。
这台机器是64位的windows 2008。
发布于 2012-10-22 06:50:17
原来问题是,要使用RegLoadKeyW(),加载的hive必须是可写的。由于卷影副本是只读的,因此失败。
当我将挂载的文件复制到卷影副本之外时,它工作得很好。
发布于 2012-10-19 05:00:33
是否在创建卷影副本的同一台计算机上进行加载?
其中一条RegLoadKeyW()评论说:
有两种注册表配置单元文件格式。在当前操作系统上创建的注册表配置单元通常不能由早期操作系统加载。
https://stackoverflow.com/questions/12958039
复制相似问题