Реестр 64-битных окон - почему% ProgramFiles% преобразуется в% ProgramFiles (x86)%? - PullRequest
3 голосов
/ 25 января 2011

После запуска следующих кодов в 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 <- Какого черта.Кто расширяет это?</p>

Я не хочу конвертировать данные.-Но мне нужно использовать тип REG_EXPAND_SZ .
Как мне это сделать?

1 Ответ

3 голосов
/ 25 января 2011

Это называется перенаправление значений реестра, и оно является частью WOW64's Virtualization Registry . Вы не можете отключить это на Server 2003 или Vista, но вы можете в Win7 (хотя я не могу вспомнить флаг на моей голове). Почему вы хотите писать ключи, указывающие на 64-битные программные файлы из 32-битного приложения? (есть законные ответы на этот вопрос, я пытаюсь выяснить сценарий подробнее)

...