零有效吗?

时间:2011-10-10 15:56:05

标签: .net winapi handle

.NET Framework中有一个SafeHandleZeroOrMinusOneIsInvalid类,以及一个SafeHandleMinusOneIsInvalid类。

这是为什么?在哪些情况下零是一个有效的句柄?

4 个答案:

答案 0 :(得分:6)

作为其他答案的补充讲座,请参阅this OldNewThing blog entry有关不一致的句柄返回值。

答案 1 :(得分:3)

是。零是stdin的文件句柄。如果为零,则非内核句柄无效。

答案 2 :(得分:3)

正如Microsoft在其documentation中提出的那样(并在Joshua的说明中进行了演示),它依赖于实现,可以这么说:

  

它描述了无效句柄的格式。

     

例如, 一些   handle使用-1作为无效句柄值,而其他使用0 。进一步   此类的派生(例如,文件或注册表句柄) 可以   进一步专门化 。有关示例,请参阅SafeFileHandle类   派生自SafeHandleZeroOrMinusOneIsInvalid的类。

答案 3 :(得分:1)

我认为你在阅读名称过多:所有这些意味着按惯例的某些API返回0表示失败,其他API返回-1。对于返回-1的API,这并不意味着0将永远是一个有效句柄,只是API返回-1表示失败。

因此,这实际上是关于API通常用于指示失败的值;它没有说明任何其他句柄值对于任何给定的API集是否有效。