6

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

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

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

4

2 回答 2

7

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

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

GDI 句柄不能被继承。

于 2010-04-23T15:24:25.087 回答
1

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

另请参阅:this SO question and its answer(What is Windows HANDLE range on a 64-bit application?)

于 2013-08-22T21:03:09.170 回答