Должен ли я закрывать HKEY? - PullRequest
0 голосов
/ 07 июля 2011

Если я сделаю:

HKEY lKey = NULL;

if(AssocQueryKey(..., &lKey) == S_OK)
{
    :
    if(RegCloseKey(lKey) == ERROR_SUCCESS)
    {
        //success
        int a = 0;//<- goes through here
    }
    else
    {
        //failure
        int a = 0;
    }
    if(RegCloseKey(lKey) == ERROR_SUCCESS)
    {
        //success
        int a = 0;
    }
    else
    {
        //failure
        int a = 0;//<- goes through here
    }
}

Может показаться, что lKey необходимо закрыть, но в документации для AssocQueryKey об этом ничего не говорится, а в справке для RegCloseKey , в частности, говорится, что «дескриптор должен быть открыт функции RegCreateKeyEx, RegCreateKeyTransacted, RegOpenKeyEx, RegOpenKeyTransacted или RegConnectRegistry ".

Должен ли я закрыть ключ? Если да, то как?

Ответы [ 3 ]

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

Документация, кажется, виновата. Рассмотрим эту страницу MSDN с кодом, в котором ключ закрыт после получения с помощью AssocQueryKey.

0 голосов
/ 07 июля 2011

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

0 голосов
/ 07 июля 2011

Вы можете быть уверены в том, как со временем будут обрабатываться дескрипторы, используя Утилита Handle . Запустите вашу программу в отладчике и посмотрите на использование ее дескриптора (особенно в категории «Реестр») до и после вызова AssocQueryKey.

Если после вызова появился новый дескриптор реестра, я думаю, вам придется его закрыть, потому что афай видит, что никто больше не собирается.

...