Функции реестра возвращают «не найдено» для ключей, которые определенно существуют. У меня правильная кодировка и двойная обратная косая черта, так что проблема не в этом.
Вот результат экспорта ключа:
[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-битное решило проблему.