3

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

4

1 回答 1

3

这称为注册表值重定向,它是WOW64 注册表虚拟化的一部分。您无法在 Server 2003 或 Vista 上禁用此功能,但您可以在 Win7 中禁用此功能(虽然不记得我头顶上的标志)。为什么要编写指向 32 位应用程序的 64 位程序文件的密钥?(这个问题有合法的答案,我正在尝试更多地弄清楚情况)

于 2011-01-25T02:44:44.013 回答