Windows可以通过32位/ 64位边界处理继承吗?

问题描述:

如果一个进程是32位而另一个是64位,子进程是否有可能从其父进程继承一个句柄?Windows可以通过32位/ 64位边界处理继承吗?

HANDLE是Win64上的64位类型和Win32上的32位类型,这表明即使它在所有情况下都是可能的,但在某些情况下它会失败:64位父进程,一个32位的子进程和一个不能用32位表示的句柄。

或者命名对象是32位进程和64位进程获取相同对象句柄的唯一方法?

如果是文件句柄或其他内核句柄,那么是的。

它只是发生,尽管HANDLE是一个64位类型,它总是可以转换为32位,并返回任何有效的句柄值。

GDI句柄不能被继承。

是的,但是当从32位句柄转换为64位句柄时,请确保签名扩展该值。也就是说,将位32-63设置为位31的值。因此,0x80000000变为0xFFFFFFFF80000000,而不是0x0000000080000000。此外,请注意,32位和64位句柄之间的兼容性只能保证用户模式句柄(除非您正在编写驱动程序或某些在内核模式下运行的内容,否则您应该始终处理这些操作。)

另请参阅:this SO question and its answer(什么是64位应用程序中的Windows HANDLE范围?)