Мой упрощенный код:
HKEY hKey;
if(someCondition)
lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_READ, &hKey);
else
lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, "SOFTWARW\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_READ, &hKey);
if(lRes == ERROR_SUCCESS)
{
std::wstring strKeyValue;
lRes = GetStringRegKey(hKey, L"valueName", strKeyValue, L"bad");
if(lRes == ERROR_SUCCESS)
{
//doSomething
}
}
Оба RegOpenKeyExW()
возвращают ERROR_SUCCESS
, но в одном случае (чтение из Wow6432Node
) GetStringRegKey()
возвращает ERROR_SUCCESS
и инициализирует strKeyValue
, а в другом случае возвращает ERROR_FILE_NOT_FOUND
. Все пути и имена значений правильные. Записи были добавлены в реестр вручную.
В чем проблема? Есть ли проблема с учетными данными? Спасибо!
lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, "SOFTWARW\\Wow6432Node\`. It should be "SOFTWARE". Also, you don't need to include the
\\Wow6432Node\` при открытии ключа реестра. ОС Windows сделает это за вас. Вам просто нужно знать об этом, когда вы сами идете ПОСМОТРЕТЬ в реестре с помощью инструмента RegEdit.exe. - person StarPilot   schedule 13.03.2013