winapi处理全球吗?

时间:2012-03-22 20:02:25

标签: winapi

一个非常简单的问题,如果我在app1.exe中创建HANDLE并且它获得值0x01,那么该值是全局唯一的吗?

或者,当某个其他流程创建的HANDLE也具有值0x01时,是否可能。

如果它们不是唯一的,那么我可以使用其他构造来获得与句柄兼容的唯一ID(这样在其他任何地方创建具有该id的HANDLE是不可能或极不可能的)。

3 个答案:

答案 0 :(得分:6)

要理解的重要一点是句柄不是对象。句柄是每个进程对象表的指针(或索引)。为了回答你的问题,HANDLES并不是全局唯一的,但是它们的范围仅限于在特定过程中有意义。

要使任何内核对象能够从其他进程访问,您必须DuplicateHandle

跨进程共享对象的另一种方法是在 bInheritHandles 设置为 true 的情况下调用CreateProcess

答案 1 :(得分:3)

它们不是唯一的。 HANDLE值是当前进程的本地值。相同的值可能是无效句柄或在另一个进程中引用不同的对象。此规则的一个例外是从父进程继承的句柄。

没有集中注册表的唯一ID是使用GUID。但它们与HANDLE不兼容,它们是128位,而句柄是32或64位。

答案 2 :(得分:2)

使用DuplicateHandle在进程之间传递句柄。