В Visual C ++ есть способ остановить перенаправление реестра от преобразования system32 в syswow64? - PullRequest
1 голос
/ 07 марта 2012

Я написал программу на Visual C ++, которая проверяет конкретное значение reg_expand_sz в реестре на наличие изменений. Значением по умолчанию является% SystemRoot% \ System32 \ NOTEPAD.EXE. Если значение изменилось, программа вернет его к данным по умолчанию. Ключи, которые я изменяю, являются общими или отражаются в зависимости от версии Windows, поэтому не имеет значения, какое представление реестра (32-разрядное или 64-разрядное) я изменяю, так как ключи будут синхронизированы.

Моя проблема заключается в том, что если я использую 64-разрядную версию Windows и использую 32-разрядную версию программы, измените данные значения на% SystemRoot% \ System32 \ NOTEPAD.EXE из-за Перенаправление реестра, данные вместо этого будут сохранены как% SystemRoot% \ SysWOW64 \ Notepad.exe. Это не правильные данные по умолчанию, хотя. Если я скомпилирую программу в 64-битной версии, она будет работать как положено. Я бы предпочел, однако, если это возможно, иметь одну 32-разрядную версию, которая могла бы сбрасывать значения по умолчанию независимо от того, является ли ОС 32-разрядной или 64-разрядной.

Кто-нибудь знает способ отключения этого преобразования System32 в SysWOW64 в значениях reg_sz / reg_expand_sz или знает другой метод, который я могу использовать для достижения этой задачи? Я мог бы выписать файл реестра и использовать system () для выполнения reg или regedit и импортировать его, но я бы предпочел сделать все в пределах самой программы.

Ниже мой текущий код:

    HKEY hKey;
DWORD size;
LONG lResults;

wchar_t szVdata[] = L"%SystemRoot%\\System32\\NOTEPAD.EXE %1";

size = sizeof(szVdata);

lResults = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Classes\\batfile\\shell\\edit\\command",0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);

if(lResults == ERROR_SUCCESS)
    RegSetValueExW (hKey, L"",0, REG_EXPAND_SZ, (PBYTE)szVdata, size);

RegCloseKey (hKey);

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 марта 2012

Попробуйте %SystemRoot%\\SysNative\\

...