运行以下代码后,在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_SZ 类型。
我该怎么办?
答案 0 :(得分:3)
这称为注册表值重定向,它是WOW64's Registry Virtualization的一部分。你不能在Server 2003或Vista上禁用它,但你可以在Win7中(虽然不记得我头顶的旗帜)。为什么要从32位应用程序写入指向64位程序文件的键? (这个问题有合理的答案,我试图更多地弄清楚这个场景)