无法读取C中的某些registry项

我使用RegOpenKeyEx()和RegQueryValueEx()来尝试获取Windowsregistry中的六个键的值。 我能够在六个人中的四个中做到这一点,但是在某些人身上却失败了。

wchar_t * getRegKeyValue(HKEY rootKeyToGet, LPCWSTR subKeyToGet, LPCWSTR valueToGet) { HKEY resultHKey = 0; wchar_t resultString[255] = L""; DWORD dwType = REG_SZ; DWORD resultSize = 255; // See if the subkey exists. If it does, get its value. if (RegOpenKeyEx(rootKeyToGet, subKeyToGet, NULL, KEY_ALL_ACCESS, &resultHKey) == ERROR_SUCCESS) { RegQueryValueEx(resultHKey, valueToGet, NULL, &dwType, (LPBYTE) &resultString, &resultSize); } RegCloseKey(resultHKey); resultHKey = NULL; RegCloseKey(rootKeyToGet); rootKeyToGet = NULL; return resultString; } 

以下是一些成功的电话:

 swprintf(buffer, L"&ie=%s", getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Internet Explorer", L"Version")); swprintf(buffer, L"&os=%s.", getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"CurrentVersion")); wcscat(url, getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"CurrentBuild")); 

不成功的呼叫示例:

 wcscpy(buffer, getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"CSDVersion")); 

我可以打开不成功的调用中的键,但该值的查询返回一个空string。 我以pipe理员身份运行Visual Studio。 一直在挠挠我的头脑,最后一天我要去哪里错了。

更新:返回的代码是ERROR_FILE_NOT_FOUND。 这些代码是绝对显示在registry中的。

Solutions Collecting From Web of "无法读取C中的某些registry项"

我想你有一个32位的进程和一个64位的机器。 发生这种情况时,注册表重定向会混淆事项。 尝试阅读HKLM\Software\...被重定向到HKLM\Software\Wow64Node\... 因此,您需要使用RegistryView枚举打开注册表的64位视图。