如果一个进程是32位而另一个进程是64位,子进程是否可以从其父进程继承句柄?
HANDLE是Win64上的64位类型和Win32上的32位类型,这表明即使它在所有情况下都应该是可能的,但在某些情况下它会失败:64位父进程,一个32位的子进程,以及一个无法用32位表示的句柄。
或者是将对象命名为32位进程和64位进程的唯一方法来获取同一对象的句柄?
答案 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范围是什么?)