RegCreateKeyEx - обновляет ли он возвращенный дескриптор при сбое? - PullRequest
0 голосов
/ 14 марта 2010

Документация MSDN, по-видимому, ничего не говорит о том, обновляет ли RegCreateKeyEx значение дескриптора, на которое ссылается его второй по величине параметр, в случае сбоя. Мои тесты только показали, что это не нужно обновлять - то есть я установил h = 0 перед вызовом, передал & h вызову RegCreateKeyEx, чтобы открыть несуществующий ключ, и увидел h = 0 после вызова. Кто-нибудь знает какие-либо ситуации, в которых ручка будет изменена?

Ответы [ 4 ]

3 голосов
/ 14 марта 2010

Это не задокументировано, потому что оно не определено. Проверьте возвращаемое значение - вот для чего оно.

Даже если это работает с вашей конкретной копией Windows, какая-то будущая версия может делать все, что захочет, чтобы HKEY передавался. Программы, которые полагаются на такое неуказанное поведение, не работают.

Просто проверьте возвращаемое значение и проигнорируйте HKEY в случае ошибки - это единственный правильный способ использовать RegCreateKeyEx.

0 голосов
/ 15 марта 2010

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

0 голосов
/ 14 марта 2010

Документация API (на которую было бы вежливо указывать ссылку в вашем вопросе) гласит:

Указатель на переменную, которая получает дескриптор открытого или созданного ключа.

Почему вы думаете, что он должен изменить дескриптор, если открыть или создать не удалось? В документации написано:

Если функция завершается успешно, возвращается значение равно ERROR_SUCCESS.

это то, что вы должны проверить.

0 голосов
/ 14 марта 2010

Я не знаю конкретного поведения этой функции. Однако параметр «от второго до последнего» представляет вновь созданный дескриптор. При сбое я бы ожидал, что он укажет на недопустимое значение дескриптора, которое обычно представлено 0. Таким образом, наличие 0 после сбоя вызова функции полностью ожидается.

Относительно того, установит ли он значение 0 в случае сбоя, я не знаю. Но если это не задокументировано, я бы точно не зависел от этого.

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