RegCreateKeyEx - 它是否在失败时更新返回的句柄?

时间:2010-03-14 19:22:37

标签: c++ c winapi registry

MSDN文档似乎没有说明RegCreateKeyEx是否会在失败时更新其倒数第二个参数引用的句柄值。我的测试只显示它不更新它 - 即,我在呼叫前设置h = 0,传递& h调用RegCreateKeyEx打开一个不存在的键,并在调用后看到h = 0。有谁知道手柄会被改变的任何情况?

4 个答案:

答案 0 :(得分:3)

没有记录,因为它未定义。检查返回值 - 这就是它的用途。

即使它适用于您的特定Windows副本,一些未来的版本也可以随意对传入的HKEY执行任何操作。依赖于此类未指定行为的程序会被破坏 - 期间。

只需检查返回值并在发生错误时忽略HKEY - 这是使用RegCreateKeyEx的唯一正确方法。

答案 1 :(得分:0)

我不知道这个函数的特殊行为。但是,倒数第二个参数表示新创建的句柄。失败时,我希望它指向一个无效的句柄值,通常用0表示。因此在函数调用失败后得到0是完全可以预期的。

关于它是否会在失败时将其设置为0我不知道。但如果没有记录,我当然不会依赖它。

答案 2 :(得分:0)

API documentation(在你的问题中提供链接是礼貌的),说:

  

指向接收变量的指针   打开或创建的键的句柄。

如果open或create失败,为什么你认为它应该改变句柄?文档说:

  

如果功能成功,则返回   值为ERROR_SUCCESS。

这是你应该测试的。

答案 3 :(得分:0)

API不做任何保证,但是如果它将被设置为失败的任何东西,它将被设置为0,所以要进行测试,你应该在拨打电话之前将其设置为0以外的值,然后看看是否失败时它被设置为0。