手柄的大小是多少?

时间:2014-09-10 16:54:50

标签: c windows structure handle

对于练习,我会查看STARTUPINFO结构。如您所见,最后3个元素的类型为HANDLE

所以我想知道HANDLE的大小。有人知道HANDLE的大小吗?

2 个答案:

答案 0 :(得分:6)

Windows HANDLE类型不是完全不透明的类型。 Windows定义了一些您可以依赖的属性。主要问题是您的问题的答案:它始终为void *类型。来自MSDN上的Windows Data Types条目:

  

<强> HANDLE

     

对象的句柄。

     

此类型在WinNT.h中声明如下:

     

typedef PVOID HANDLE;

在表格的后面,您可以看到PVOID被定义为void *

因此HANDLE的大小与void *相同。或者换句话说,使用32位编译器时为32位,使用64位编译器时为64位。您不需要在代码中硬编码这些值,而只需使用sizeof(HANDLE)

Windows HANDLE类型的其他属性非常模糊,几乎没有记录:对于内核句柄the bottom two bits are always zero。您不应该在代码中依赖于此,并希望您可以看到您永远不会想要的。我提到这一点是为了完整性,并强调微软如何定义HANDLE不仅仅是一个内部实现细节。

答案 1 :(得分:5)

最佳答案是使用sizeof(HANDLE)来获取此信息。如果我没记错的话,HANDLE通常被typedef用作void*,因此可能是32位或64位,但你不应该依赖它。

希望这有帮助!