Невозможно прочитать определенные ключи реестра в C - PullRequest
3 голосов
/ 30 сентября 2011

Я использую RegOpenKeyEx () и RegQueryValueEx (), чтобы попытаться получить значение для шести ключей в реестре Windows.Я могу сделать это для четырех из шести, но не могу выполнить некоторые другие.

wchar_t * getRegKeyValue(HKEY rootKeyToGet, LPCWSTR subKeyToGet, LPCWSTR valueToGet)
{
    HKEY resultHKey = 0;
    wchar_t resultString[255] = L"";
    DWORD dwType = REG_SZ;
    DWORD resultSize = 255;

    // See if the subkey exists. If it does, get its value.
    if (RegOpenKeyEx(rootKeyToGet, subKeyToGet, NULL, KEY_ALL_ACCESS, &resultHKey) == ERROR_SUCCESS)
    {
        RegQueryValueEx(resultHKey, valueToGet, NULL, &dwType, (LPBYTE) &resultString, &resultSize);
    }

    RegCloseKey(resultHKey);
    resultHKey = NULL;

    RegCloseKey(rootKeyToGet);
    rootKeyToGet = NULL;

    return resultString;
}

Ниже приведены некоторые успешные вызовы:

swprintf(buffer, L"&ie=%s", getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Internet Explorer", L"Version"));

swprintf(buffer, L"&os=%s.", getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"CurrentVersion"));

wcscat(url, getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"CurrentBuild"));

Пример неудачного вызова:

wcscpy(buffer, getRegKeyValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"CSDVersion"));

Я могу открыть ключ при неудачном вызове, но запрос этого значения возвращает пустую строку.Я использую Visual Studio как администратор.Последний день царапал мне голову о том, где я ошибаюсь.

Обновление: возвращен код ERROR_FILE_NOT_FOUND.Коды наиболее определенно показаны в regedit.

1 Ответ

6 голосов
/ 30 сентября 2011

Полагаю, у вас есть 32-битный процесс и 64-битный компьютер. Когда это происходит, перенаправление реестра приводит в замешательство. Попытки прочитать HKLM\Software\... перенаправляются на HKLM\Software\Wow64Node\.... Поэтому вам нужно открыть 64-битное представление реестра с перечислением RegistryView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...