C++ 从 64 位应用程序读取 SOFTWARE\WOW6432 中的注册表项

use*_*684 2 c++ registry winapi

我有一些 32 位 C++ 代码来从注册表读取键/值对,如下所示:

    // Get a handle to the required key
    HKEY    hKey;
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\MyKey", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
    {
        // Look up the value for the key
        bOK = (RegQueryValueEx(hKey, szKey, NULL, NULL, (PBYTE)szValue, &dwMax) == ERROR_SUCCESS);
        
        // Release the handle
        RegCloseKey(hKey);
    }
Run Code Online (Sandbox Code Playgroud)

由于它是一个 32 位应用程序,因此它从 SOFTWARE\WOW6432Node\MyKey 读取

在我将应用程序移植到 64 位之前,它工作得很好,所以它现在从 SOFTWARE\MyKey 读取。

我的安装程序不允许我将条目同时放入注册表的 32 位和 64 位部分,因此我需要 64 位应用程序继续从 WOW6432Node 获取其数据。

有谁知道如何做到这一点?

非常感谢托尼·雷诺兹

IIn*_*ble 5

如注册表中 32 位和 64 位应用程序数据下所述:

KEY_WOW64_64KEY 和 KEY_WOW64_32KEY 标志分别允许显式访问 64 位注册表视图和 32 位视图。有关详细信息,请参阅访问备用注册表视图

后一个链接解释了这一点

这些标志可以在以下注册表函数的samDesire d 参数中指定:

以下代码可以完成您的要求:

// Get a handle to the required key
HKEY    hKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\MyKey", 0, KEY_READ | KEY_WOW64_32KEY, &hKey) == ERROR_SUCCESS)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)