32

我正在拨打以下电话:

result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);

(C++、Visual Studio 5、Vista 64 位)。

即使“ regedit”显示密钥存在,它也会失败,错误代码为 2(“找不到文件”)。此代码一直适用于 32 位 XP。为什么它明显存在时“找不到文件”?

4

5 回答 5

61

我发现我可以使用 flag: 来解决我的问题 KEY_WOW64_64KEY ,例如:

result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);

完整说明:注册表中的 32 位和 64 位应用程序数据

于 2008-10-31T00:58:59.987 回答
26

在 Windows 64 位系统上,注册表实际上分为两部分。一部分由 64 位进程使用,一部分由 32 位进程使用。

例如,如果 32 位应用程序以编程方式写入它认为是 HKLM\SOFTWARE\Company\Application,它实际上被 WoW64 层重定向到 HKLM\SOFTWARE\Wow6432Node\Company\Application。

因此,当您运行 32 位应用程序并调用 RegOpenKeyEx 时,它实际上是针对 Wow6432Node\ 文件夹而不是常规的 \SOFTWARE 节点工作的。

于 2008-11-14T19:15:08.493 回答
1

您必须使用“使用多字节字符集”进行编译或将代码中的字符串转换为(LPWSTR)

于 2017-06-04T14:22:53.900 回答
0

我有一个类似的问题。我正在使用:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   (LPWSTR)"SOFTWARE\\0test",
                                   0,
                                   WRITE_DAC ,
                                   &hKey);

那没有用。我像这样尝试过,它奏效了:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   _T("SOFTWARE\\0test"),
                                   0,
                                   WRITE_DAC ,
                                   &hKey);
于 2010-06-23T18:52:11.893 回答
0

是的,win7 64B,再添加标志KEY_WOW64_64KEY,就可以了。如果不起作用,请参阅http://msdn.microsoft.com/en-us/library/ms724897(v=VS.85).aspx

于 2011-11-21T02:29:59.370 回答