64位Windows注册表 - 为什么%ProgramFiles%转换为%ProgramFiles(x86)%?

时间:2011-01-25 02:40:05

标签: windows winapi registry wow64

运行以下代码后,在32位进程中,数据 %ProgramFiles% 会自动转换。

HKEY hSubKey;
DWORD dwState;
RegCreateKeyEx(HKEY_CURRENT_USER, L"TestKey", NULL, NULL,
   REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, &dwState);
std::wstring data = L"%ProgramFiles%";
RegSetValueEx(hSubKey, L"TestValue", NULL, REG_EXPAND_SZ,
  (BYTE*)data.c_str(), (DWORD)(data.size() * sizeof(WCHAR)) + sizeof(WCHAR));

结果
enter image description here < - 我勒个去。谁扩大了它?

我不想转换数据。 - 但我必须使用 REG_EXPAND_SZ 类型。
我该怎么办?

1 个答案:

答案 0 :(得分:3)

这称为注册表值重定向,它是WOW64's Registry Virtualization的一部分。你不能在Server 2003或Vista上禁用它,但你可以在Win7中(虽然不记得我头顶的旗帜)。为什么要从32位应用程序写入指向64位程序文件的键? (这个问题有合理的答案,我试图更多地弄清楚这个场景)