【发布时间】:2021-01-14 11:48:55
【问题描述】:
RegOpenKeyEx/RegCreateKeyEx 可以将NULL 作为有效的HKEY 值返回吗?
我正在分析QSettings(https://code.woboq.org/qt5/qtbase/src/corelib/io/qsettings_win.cpp.html#_ZL15createOrOpenKeyiiRK7QStringi)的源代码。
如果NULL 可能是HKEY 的有效值,则QSettings 在Windows 下的实现存在错误。
【问题讨论】:
-
有效句柄不能为 0。但无论如何实现都很糟糕 - 需要分析返回的状态码,但不是
HKEY。并将状态码返回给调用者 -
@RbMm "需要分析返回的状态码而不是 HKEY" - 这正是
QSettings在调用注册表 API 时实际所做的。 “并将状态代码返回给调用者” - 如果调用者不需要错误代码,则不需要。有问题的代码在失败时向调用者返回一个 NULL hkey。这完全没问题,只要调用者在使用之前检查 hkey 是否为 NULL。这段代码的作用,AFAICS。 -
@AlexanderDyagilev "
QSettings在 Windows 下的实现存在错误" - 我在链接代码中没有看到与滥用 NULL hkey 相关的错误。您能否更具体地说明您认为该错误究竟是什么? -
@Remy Lebeau if opened
HKEY可以为 NULL,然后QSettings将其视为失败并生成错误。只有在 openedHKEY永远不能是NULL的情况下才没有错误。这就是问题的全部内容。 -
@AlexanderDyagilev "如果打开
HKEY可以为 NULL" - 它不能。这就是你的答案。