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范围?)