在64位和32位窗口中读取注册表

时间:2017-05-26 10:34:54

标签: c++ winapi mfc registry

我正在使用64位Windows-7编写应用程序。在注册表中,我有一个要从路径中读取的密钥:

  

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ XXXX

我首先尝试使用以下代码打开密钥:

RegOpenKeyEx(HKEY_LOCAL_MACHINE, Path, 0, KEY_ALL_ACCESS, &hKey) 

之后我能够读取这些值。这在64位Windows上工作正常,但在32位Windows上不起作用。在32位Windows上读取它应该怎么做?

2 个答案:

答案 0 :(得分:3)

Windows 64位系统将注册表分为两部分。一个用于32,另一个用于64位系统。 我相信您应该将您的电话更新为以下内容:

RegOpenKeyEx(HKEY_LOCAL_MACHINE, Path, 0, KEY_ALL_ACCESS | KEY_WOW64_32KEY, &hKey)

答案 1 :(得分:1)

WOW64仿真器以及Wow6432Node密钥在32位版本的Windows上不存在,仅在64位Windows上存在。在64位Windows上运行的32位应用程序在尝试访问HKEY_LOCAL_MACHINE\Software\Wow6432Node\XXXX时会重定向到HKEY_LOCAL_MACHINE\Software\XXXX密钥。

正确的解决方案是始终使用正常路径而不指定Wow6432Node。在64位Windows上,如果希望64位进程访问32位密钥,请使用KEY_WOW64_32KEY标志;如果希望32位进程访问64位,请使用KEY_WOW64_64KEY标志位密钥。

在您的示例中,请尝试以下方法:

REGSAM Rights = KEY_QUERY_VALUE;
#ifdef _WIN64
Rights |= KEY_WOW64_32KEY;
#endif

RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\XXXX"), 0, Rights, &hKey);

阅读MSDN文档以获取更多详细信息:

Registry Redirector

Registry Keys Affected by WOW64

Accessing an Alternate Registry View