regopenkeyex在Windows 8.1上返回2

时间:2017-06-05 02:29:44

标签: c++ windows registry

我有一个32位程序,它在同一个商店的两个通道中运行。该程序尝试顶部打开一个注册表项进行查询。操作系统是Windows 8.1 64位。

在一个通道上它成功,另一个通道失败并且regopenkeyex返回2. GetLastError返回0.

它尝试打开的密钥位于WOW6432Node。

程序在两台计算机上的同一Windows用户下运行,两者都存在密钥。 UAC设置为"从不通知" (最低),windows版本是一样的。一切都应该是一样的......

我故意不指定KEY_WOW64_64KEY,因为代码应该在没有它的情况下工作。但即使我使用它,我也会得到相同的结果。

可能导致这种情况的原因是什么?

代码:

rc = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
               szKey,
                0,
                KEY_QUERY_VALUE,
                &m_hKey);

谢谢。

1 个答案:

答案 0 :(得分:0)

您实际上需要了解您在MSDN上使用的功能。注册表函数直接返回错误代码,它们不使用GetLastError

2是ERROR_FILE_NOT_FOUND,因此您在szKey中隐藏的任何内容都不是有效的子项路径。

WOW6432Node是您不应该使用的保留键名,如果需要在64位应用程序中访问32位注册表视图,请使用KEY_WOW64_32KEY。默认情况下,32位应用程序会读取WOW6432Node键下的键。

使用Process Monitor确保您访问的是正确的密钥。