2011-01-25 5 views
3

После запуска следующих кодов в 32-битном процессе данные % ProgramFiles% преобразован автоматически.64-битный реестр Windows - почему% ProgramFiles% конвертировано в% ProgramFiles (x86)%?

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.
Как мне это сделать?

ответ

3

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

+0

Я думаю, что это немного отличается от перенаправления реестра. Любой ключ не перенаправлялся. Просто значение среды расширилось. Я не хочу указывать на 64-битные программные файлы. Я хочу указать 32 и 64-битные файлы программы зависит от приложения, читающего реестр. Вот почему я использовал значение среды. – Benjamin

+1

Нет, он изменил буквенную строку «% ProgramFiles%» на «% ProgramFiles (x86)%», это именно то, о чем я говорю. Это не * расширенный *, это просто * переменная среды * –

+0

Ага, вы правы. Я пытаюсь отключить это. – Benjamin

 Смежные вопросы

  • Нет связанных вопросов^_^