RegOpenKeyEx/RegGetValue возвращают ERROR_FILE_NOT_FOUND для существующих ключей.

Функции реестра возвращают «не найдено» для ключей, которые определенно существуют. У меня правильная кодировка и двойная обратная косая черта, так что проблема не в этом.

Вот результат экспорта ключа:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Netmon3]
"NetmonVersion"="3.4.2350.0"
"NPLVersion"="03.02"
"InstallDir"="C:\\prog\\netmon3\\"
"NetmonEdition"="Capture and Parser Engine"

Вот вызов функции:

x = RegOpenKeyExA(
           HKEY_LOCAL_MACHINE, 
           "SOFTWARE\\Microsoft\\Netmon3", 
           0, 
           KEY_READ, &hKey);

Возвращаемое значение x равно 2, что означает ERROR_FILE_NOT_FOUND. Однако использование просто "SOFTWARE\\Microsoft" в качестве строки работает нормально.

Вызов RegGetValue() имеет ту же проблему:

x = RegGetValueA(
        HKEY_LOCAL_MACHINE,
        "SOFTWARE\\Microsoft\\Netmon3",
        "InstallDir",
        RRF_RT_ANY,
        NULL,
        (PVOID)install_directory,
        &BufferSize
        );

Опять же, в результате я получаю 2, что означает не найдено.

Я проверил разрешения на него, и все «Пользователи» имеют права «Чтение» на нем.

Что бы я ни упустил, это должно быть что-то очевидное, но, ломая голову, я не вижу этого.

--

Ниже приводится ответ Marsh Ray: Я компилировал 32-разрядную версию в 64-разрядной системе, а установка Netmon3 была 64-разрядной. Изменение настроек сборки на 64-битное решило проблему.

6
задан RobertDavidGraham 21 June 2012 в 04:21
поделиться