在以下代码运行后,在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.
我该怎么办?

有帮助吗?

解决方案

这称为注册表价值重定向,它是 WOW64的注册表虚拟化. 。您不能在Server 2003或Vista上禁用此功能,但是您可以在Win7中禁用(尽管不记得我头顶的标志)。为什么要编写指向64位程序文件的键? (这个问题有合法的答案,我试图更多地弄清楚场景)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top