Windows可以处理跨越32位/ 64位边界的继承吗?

时间:2010-04-23 15:22:20

标签: windows 64-bit 32-bit 32bit-64bit handle

如果一个进程是32位而另一个进程是64位,子进程是否可以从其父进程继承句柄?

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

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

2 个答案:

答案 0 :(得分:7)

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

虽然HANDLE是64位类型,但它总是可以转换为32位并返回任何有效的句柄值。

GDI句柄不能被继承。

答案 1 :(得分:0)

是的,但是当从32位句柄转换为64位句柄时,请确保对该值进行符号扩展。也就是说,将位32-63设置为位31的值。因此,0x80000000变为0xFFFFFFFF80000000,而不是0x0000000080000000。另请注意,32位和64位句柄之间的这种兼容性仅保证用户模式句柄(除非您正在编写驱动程序或在内核模式下运行的某些内容,否则无论如何都应该处理此问题。)

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