gpt4 book ai didi

qt - 有效的 HKEY 可以为 NULL 吗?

转载 作者:行者123 更新时间:2023-12-05 06:53:41 25 4
gpt4 key购买 nike

RegOpenKeyEx/RegCreateKeyEx 能否返回 NULL 作为有效的 HKEY 值?

我正在分析 QSettings ( https://code.woboq.org/qt5/qtbase/src/corelib/io/qsettings_win.cpp.html#_ZL15createOrOpenKeyiiRK7QStringi ) 的源代码。

如果 NULLHKEY 的可能有效值,则 QSettings 在 Windows 下的实现有错误。

最佳答案

Can RegOpenKeyEx/RegCreateKeyEx return NULL as a valid HKEY value?

不,有效的打开 HKEY 永远不会为 NULL。

另一方面,如果这些函数失败,返回的 HKEY 的值是不确定的。如果 HKEY 在失败时被设置为 NULL,则 Win32 API 文档没有说明任何一种方式,因此您不能仅仅依赖检查返回的 调用这些函数时,HKEY 用于 NULL 与非 NULL,例如:

HKEY hKey; // uninitialized
RegOpenKeyEx(..., &hKey, ...);
if (hKey) {
// use hKey as needed - undefined behavior!
RegCloseKey(hKey);
}

函数在成功时返回 0,在失败时返回非零。调用者必须查看它以确定 HKEY 是否有效,例如:

HKEY hKey;
LONG res = RegOpenKeyEx(..., &hKey, ...);
if (res == ERROR_SUCCESS) {
// use hKey as needed - OK!
RegCloseKey(hKey);
}

而 AFAICS,QSettings 正是这样做的,在显式检测故障时将其 HKEY 变量显式设置为 NULL,这非常好。

If NULL is a possible valid value for HKEY

NULL 不是这些函数输出的有效 opened 值,因此 NULL 可用于应用程序在表示 unopened< 时将其 HKEY 设置为/em> 键。就像大多数其他 Win32 句柄/指针类型一样。

then QSettings's implementation under Windows has bug.

我在您链接的代码中没有看到任何此类错误。 RegOpeKeyEx()/RegCreateKeyEx()的所有使用都是正确的,它们在使用返回的HKEY之前检查错误代码,HKEY 变量为 未打开 键设置为 NULL,并且没有对 NULL HKEY 执行读/写操作。那么错误在哪里呢?

关于qt - 有效的 HKEY 可以为 NULL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65718413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com