Windows是否支持32位和64位界限之间的继承?

6
一个32位进程和一个64位进程,如果其中一个进程是32位,另一个进程是64位,那么子进程是否可以继承父进程的句柄呢?
在Win64上,HANDLE是64位类型,在Win32上是32位类型。这表明即使在所有情况下都应该可能,也会有一些情况失败:64位父进程、32位子进程和无法表示为32位的句柄。
或者说,对于32位进程和64位进程来说,命名对象是唯一的获取相同对象句柄的方法吗?
2个回答

7
如果它是一个文件句柄或其他内核句柄,那么是的。虽然HANDLE是64位类型,但对于任何有效的句柄值,它总是可以转换为32位并返回。GDI句柄不能被继承。

1

是的,但在从32位句柄转换为64位句柄时,请确保将值进行符号扩展。也就是说,将32-63位设置为第31位的值。因此,0x80000000 变成 0xFFFFFFFF80000000,而不是 0x0000000080000000。此外,请注意,32位和64位句柄之间的兼容性仅对用户模式句柄(除非您正在编写运行在内核模式下的驱动程序或类似的东西)才得到保证。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接