检查HKEY HANDLE是否有效

Checking if a HKEY HANDLE is valid?

本文关键字:有效 是否 HANDLE HKEY 检查      更新时间:2023-10-16

我使用的函数基本上可以做到这一点:

HANDLE someHandler;
RegCloseKey((HKEY) someHandler);

RegCloseKey()返回ERROR_SUCCESS后,我检查以下内容:

if (someHandler == INVALID_HANDLE_VALUE)
{ ..... }

但我现在明白了,上述条件从来都不是真的。我尝试用null, null pointer替换INVALID_HANDLE_VALUE的检查,但都失败了。如何检查句柄是否有效?

RegCloseKey不会更改句柄值。它只是关闭了手柄。一旦它被关闭,变量someHandler就会记住句柄值是什么,但它没有用处。与其测试它,不如将其设置为无效值:
RegCloseKey(someHandler);
someHandler = INVALID_HANDLE_VALUE;

这将防止你在关闭后意外尝试使用它。同样的模式也可以应用于动态内存、文件句柄等。你也可以考虑使用一个为C++设计的框架,为你隐藏一些资源管理的细节。例如,ATL为注册表访问提供了一个比面向C的Windows API更自然的C++接口。