64位Windowsregistry – 为什么%ProgramFiles%转换为%ProgramFiles(x86)%?

运行以下代码后,在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)); 

结果
在这里输入图像说明 – 什么地狱。 谁扩展它?

我不想转换数据。 但是我必须使用REG_EXPAND_SZtypes。
我该怎么做?

这被称为注册表值重定向,它是WOW64的注册表虚拟化的一部分。 你不能在server 2003或Vista上禁用这个功能,但是你可以在Win7下(虽然不能记住我头顶的标志)。 为什么要编写指向32位应用程序的64位程序文件的密钥? (这个问题有合法的答案,我试图找出更多的情况)