Странная ошибка при попытке прочитать значение реестра в Windows / C ++ - PullRequest
0 голосов
/ 17 июля 2011

Я пытаюсь прочитать путь установки для приложения, и я озадачен поведением, которое я получаю. Во-первых, вот код, который не работал (отформатировал его, чтобы он не занимал огромную строку):

LONG status = RegQueryValueEx(
    hkRegistry,
    "InstallPath",
    0,
    &regType, (LPBYTE)installPath,
    &regSize );
if (status == ERROR_SUCCESS) {
    // Handle success.
}

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

else {
    throw Exception( status );
}

Но потом ... код начал работать и вызов на RegQueryValueEx завершился успешно. Я был в состоянии повторить это поведение, пока я выбрасывал что-то в else. Если я закомментирую тело else, ошибка вернется.

Редактировать: Хорошо, я попытался вызвать MessageBox вместо исключения, и у меня такое же поведение. Если я это закомментирую, он снова перестанет работать.

Есть ли рациональное объяснение этому?

1 Ответ

1 голос
/ 17 июля 2011

Возможно, что буфер для installPath слишком мал по сравнению со значением, содержащимся в regSize (которое должно быть инициализировано в размере буфера).

Если installPath - это стекЯ подозреваю, что оно переполнено, что приводит к перезаписи значения status.

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