2013-06-19 39 views
0

长期以来,我试图创建位于二进制.dat文件中的两个注册表配置单元的差异。通过注册表缓存的最佳方式(C++)?

使用RegLoadAppKey挂载配置单元后,递归遍历所有键及其值的最佳方法是什么?

我看着RegEnumKeyEx,但只允许我遍历RegLoadAppKey返回的根节点的子键,并且不会(据我所知)返回任何类型的子键的句柄。

此外,我使用RegLoadAppKey的原因是因为这个迷你应用程序需要能够没有管理员权限运行。

+0

如果有帮助(这是一次性的),您[可以使用WinDiff](http://support.microsoft.com/kb/171780)。 –

+0

我可能只是从regedit导出并使用普通文本不同 –

回答

2

不放在RegLoadAppKey http://msdn.microsoft.com/en-us/library/windows/desktop/ms724886(v=vs.85).aspx

扫兴

从MSDN文档

不同于RegLoadKey,RegLoadAppKey不加载下 HKEY_LOCAL_MACHINE或HKEY_USERS蜂房。取而代之的是,配置单元将被加载到不能枚举的 特殊根目录下。其结果是,没有办法一一列举目前RegLoadAppKey装载蜂箱

此外,你可能会遇到路障了一些你尝试的安全设置,以避免

所有按键在配置单元内部必须具有相同的安全描述符,否则该函数将失败。此安全描述符必须授予调用方 由samDesired参数指定的访问权限,否则 函数将失败。您不能在 配置单元内的任何密钥上使用RegSetKeySecurity功能。

+0

因此,在RegLoadAppKey文档中,我阅读了以下内容:“由RegLoadAppKey加载的配置单元上的所有操作必须相对于phkResult中的句柄返回执行。所以我认为这绝对有可能。关于安全描述符的第二个评论确实让我担心... – evve

+0

我认为这意味着您无法枚举挂载点,而不是挂载配置单元中的键? – paulm