SHGetValueW对x64和x86返回不同的值



我正在使用SHGetValueW API读取注册表值。

WCHAR activePolicyCode[512UL] = { 0 };
DWORD dwSize = sizeof(activePolicyCode);
DWORD type;    
LSTATUS ret = SHGetValueW(HKEY_LOCAL_MACHINE, L"SOFTWARE\Microsoft\Windows\CurrentVersion\DeviceAccess", L"ActivePolicyCode", &type, &activePolicyCode, &dwSize);

对于x64,它返回0 - ERROR_SUCCESS

但是对于x86,它返回2 - ERROR_FILE_NOT_FOUND

为什么在行为上有差异?如何从x86应用程序读取值?

对于在64位系统上运行的32位应用程序,注册表函数被重定向到WOW6432Node。所以如果你查询HKEY_LOCAL_MACHINEhKey,你会得到以下值:

HKEY_LOCAL_MACHINESOFTWAREWOW6432Node

所以在您的情况下,这个键可能在WOW6432Node中不存在。在RegOpenKeyExW

中可以使用KEY_WOW64_64KEY
HKEY hKey=0;
DWORD dwType=0;
BYTE pbData[1024];
DWORD dwDataSize = sizeof(pbData);
LSTATUS lStatus = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\Microsoft\Windows\CurrentVersion\DeviceAccess", 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
if (lStatus == ERROR_SUCCESS) {

lStatus = SHGetValueW(hKey, L"SOFTWARE\Microsoft\Windows\CurrentVersion\DeviceAccess", L"ActivePolicyCode", &dwType, pbData, &dwDataSize);
// Close the registry key
RegCloseKey(hKey);

}

关于访问备用注册表视图的更多信息:

相关内容

  • 没有找到相关文章

最新更新