c++ - 在预定义的注册表项句柄上调用 RegCloseKey

标签 c++ winapi registry

考虑围绕原始 HKEY 句柄的 C++ 包装类的情况。

包装类有一个构造函数重载,将 HKEY 句柄作为输入:构造的对象拥有输入原始句柄的所有权。
析构函数在包装句柄上调用 RegCloseKey(),存储在 HKEY m_hKey 数据成员中。

现在,考虑将预定义句柄(如 HKEY_CURRENT_USER)传递给构造函数重载的情况。 HKEY_CURRENT_USER 值分配给 m_hKey 成员。

析构函数对该预定义键调用 RegCloseKey()。在我的实验中,API 在这种情况下返回 0,意思是:成功。那么,可以在预定义的注册表项句柄上调用 RegCloseKey() 吗? 或者是否应该实现进一步检查,例如:

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

最佳答案

RegOpenKey function 的 MSDN 文档推断您只想在您以编程方式创建的句柄上调用 RegCloseKey

...如果 key 不是预定义的注册表项之一,请在使用完句柄后调用 RegCloseKey 函数。

关于c++ - 在预定义的注册表项句柄上调用 RegCloseKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43525828/

相关文章:

c++ - 当程序可见或最小化时进程 ID 发生变化

c++ - 从 C++ 应用程序查询堆

windows - 关联 App Store 应用程序和桌面应用程序的方法

c# - 访问 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData

c++ - 试图通过搜索注册表找到excel的路径

c++ - QPainter怎么转? (从工厂函数中 move 一个对象)

c++ - 模板类运算符重载返回类型

c++ - std::call_once() 在 callable 抛出第一次调用后在第二次调用时挂起

c++ - 将非空终止 c 字符串转换为终止 c 字符串的最干净方法

c# - Windows 服务更改/删除注册表值