开发者

Can Windows handle inheritance cross the 32-bit/64-bit boundary?

Is it possible for a child process to inherit a handle from its parent process if one process is 32-bit and the other is 64-bit?

HANDLE is a 64 bit type on Win64 and a 32 bit type on Win32, which suggests that even it were supposed to be po开发者_开发百科ssible in all cases, there would be some cases where it would fail: a 64-bit parent process, a 32-bit child process, and a handle that can't be represented in 32 bits.

Or is naming the object the only way for a 32-bit process and a 64-bit process to get a handle for the same object?


If it is a file handle or other kernel handle, then yes.

It just happens that although HANDLE is a 64 bit type, it can always be converted to 32 bit and back for any valid handle value.

GDI handles cannot be inherited.


Yes, but when converting from 32-bit handles to 64-bit handles, make sure to sign-extend the value. That is, set bits 32-63 to the value of bit 31. So, 0x80000000 becomes 0xFFFFFFFF80000000, not 0x0000000080000000. Also, note that this compatibility between 32 and 64-bit handles is only guaranteed for user-mode handles (which is all you should ever be dealing with anyway unless you're writing a driver or some such thing that runs in kernel mode.)

See also: this SO question and its answer (What is Windows HANDLE range on a 64-bit application?)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜