Если RegOpenKeyEx не возвращает ERROR_SUCCESS, гарантирую ли я, что HKEY не был открыт?

#winapi #registry

#winapi #реестр

Вопрос:

Читая документацию Microsoft по RegOpenKeyEx и RegCloseKey, я не уверен, нужно ли мне вызывать функцию закрытия в случае сбоя RegOpenKeyEx.

Пожалуйста, укажите мне точный источник, указывающий, нужно ли мне всегда вызывать RegCloseKey или его нужно вызывать только тогда, когда RegOpenKeyEx возвращает ERROR_SUCCESS .

Ссылки:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724897(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724837(v=vs.85).aspx

Ответ №1:

RegOpenKeyEx вернет только допустимый дескриптор ключа, если ERROR_SUCCESS это возвращаемое значение. Именно здесь вызывающий отвечает за закрытие ключа, в противном случае закрытие не требуется, и ключ не открывается. Это предполагаемое соглашение об ответственности за закрытие открытого дескриптора, хотя оно явно не указано в документации по функциям RegOpenKeyEx.

Это также согласуется с примерами API. Если вы не уверены после проверки примера кода в статье MSDN, вот еще один: http://msdn.microsoft.com/en-us/library/aa384182(VS.85).aspx

Комментарии:

1. Спасибо — я предполагаю, что это так, но я ищу что-то определенное. Я отмечу этот ответ как принятый, если больше ничего не появится.

Ответ №2:

Я думаю, если вы посмотрите на пример, приведенный под вашими ссылочными ссылками, вы увидите, что он не вызывает RegCloseKey, если lResult не возвращает ERROR_SUCCESS

Это ссылка на него:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724235 (v= против 85).aspx