一个非常简单的问题,如果我在app1.exe中创建HANDLE
并且它获得值0x01
,那么该值是全局唯一的吗?
或者,当某个其他流程创建的HANDLE
也具有值0x01
时,是否可能。
如果它们不是唯一的,那么我可以使用其他构造来获得与句柄兼容的唯一ID(这样在其他任何地方创建具有该id的HANDLE
是不可能或极不可能的)。
答案 0 :(得分:6)
要理解的重要一点是句柄不是对象。句柄是每个进程对象表的指针(或索引)。为了回答你的问题,HANDLES并不是全局唯一的,但是它们的范围仅限于在特定过程中有意义。
要使任何内核对象能够从其他进程访问,您必须DuplicateHandle。
跨进程共享对象的另一种方法是在 bInheritHandles 设置为 true 的情况下调用CreateProcess。
答案 1 :(得分:3)
它们不是唯一的。 HANDLE
值是当前进程的本地值。相同的值可能是无效句柄或在另一个进程中引用不同的对象。此规则的一个例外是从父进程继承的句柄。
没有集中注册表的唯一ID是使用GUID
。但它们与HANDLE不兼容,它们是128位,而句柄是32或64位。
答案 2 :(得分:2)
使用DuplicateHandle在进程之间传递句柄。