user3194684
user3194684

Reputation: 81

C++ read a Registry entry in SOFTWARE\WOW6432 from a 64-bit app

I've got some 32-bit C++ code to read a Key/Value pair from the Registry as follows:

    // 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);
    }

As it's a 32-bit app it reads from SOFTWARE\WOW6432Node\MyKey

This was working fine until I ported the app to 64-bit, so it now reads from SOFTWARE\MyKey.

My installer won't let me put entries into both the 32-bit and 64-bit parts of the Registry, so I need the 64-bit app to go on getting its data from WOW6432Node.

Does anyone know how to do this?

Many thanks Tony Reynolds

Upvotes: 2

Views: 186

Answers (1)

IInspectable
IInspectable

Reputation: 51355

As documented under 32-bit and 64-bit Application Data in the Registry:

The KEY_WOW64_64KEY and KEY_WOW64_32KEY flags enable explicit access to the 64-bit registry view and the 32-bit view, respectively. For more information, see Accessing an Alternate Registry View.

The latter link explains that

These flags can be specified in the samDesired parameter of the following registry functions:

The following code accomplishes what you are asking for:

// 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)
{
    // ...
}

Upvotes: 5

Related Questions