在预定义的注册表密钥手柄上调用regclosekey

Invoking RegCloseKey on a predefined registry key handle

本文关键字:调用 regclosekey 密钥 预定义 注册表      更新时间:2023-10-16

考虑围绕RAW HKEY手柄的C 包装类别的情况。

包装器类具有构造函数过载,以HKEY句柄作为输入:构造对象具有输入原始句柄的所有权。
destructor在包装手柄上调用RegCloseKey(),存储在HKEY m_hKey数据成员中。

现在,考虑将诸如HKEY_CURRENT_USER之类的预定义手柄传递给构造函数超载的情况。HKEY_CURRENT_USER值分配给m_hKey成员。

Destructor在该预定义的键上调用RegCloseKey()。在我的实验中,API在这种情况下返回0,含义为:成功。那么,在预定义的注册表密钥手柄上致电RegCloseKey()是否可以?或应进一步进行检查,例如:

RegistryKey::~RegistryKey()
{
    if ((m_hKey != nullptr) && !IsPredefinedKey(m_hKey))
        ::RegCloseKey(m_hKey); 
}

RegOpenKey功能的MSDN文档您只想在编程中创建的句柄上调用RegCloseKey

... 如果密钥不是预定义注册表键之一,请在使用句柄完成后调用RegCloseKey函数。

我找不到说这没关系的官方文档,但我知道它有效。

我最接近这本书:

您实际上可以在一个预定义的根键条目之一上调用regclosekey。

它可能在野外发生了很多事情,所以我无法想象Microsoft将来会改变这一点,但是如果您不想冒险,则确实取决于您。