Чтение строкового значения из раздела реестра

Мой упрощенный код:

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, Все пути и имена значений правильные. Записи были добавлены в реестр вручную.

В чем проблема? Есть ли какие-либо проблемы с учетными данными? Спасибо!

0

Решение

Примечание. Первоначальный вопрос для этого заключался в том, в чем разница между использованием HKEY_CLASSES_ROOT и HKEY_LOCAL_MACHINE и почему использование одного работает, а другого — нет. Это ответ на этот вопрос.

Взято из Microsoft Источник: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724475(v=vs.85).aspx

Ключ HKEY_CLASSES_ROOT (HKCR) содержит расширение имени файла
ассоциации и регистрационная информация класса COM, такая как ProgID,
CLSID и IID. Он в первую очередь предназначен для совместимости с
реестр в 16-битной винде.

Информация о регистрации класса и расширении имени файла хранится в
ключи HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER.
Ключ HKEY_LOCAL_MACHINE \ Software \ Classes содержит настройки по умолчанию, которые
может применяться ко всем пользователям на локальном компьютере.
Ключ HKEY_CURRENT_USER \ Software \ Classes содержит параметры, которые применяются
только для интерактивного пользователя. Ключ HKEY_CLASSES_ROOT обеспечивает
вид реестра, который объединяет информацию из этих двух
источники. HKEY_CLASSES_ROOT также предоставляет это объединенное представление для
приложения, предназначенные для предыдущих версий Windows.

Так что разница в следующем: HKEY_CLASSES_ROOT представит унифицированное представление реестра для предыдущей версии Windows и объединит пользовательские настройки по умолчанию с текущими пользовательскими настройками. Он в первую очередь предназначен для чтения настроек интерактивного пользователя. Он не должен использоваться для хранения значений, только для чтения, как это можно найти в предоставленной ссылке, и он фактически отображается в куст HKEY_CURRENT_USER.

HKEY_CURRENT_USER это «истинный» путь к реестру, поэтому все взаимодействие с реестром, для которого требуется доступ на запись, должно проходить через него по соображениям безопасности. Выбор ветви зависит от того, обновляете ли вы только пользовательские настройки в реестре или все пользовательские настройки в реестре.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]