我一直在努力更好地了解WinAPI和底层Windows内核。从我到目前为止看到的,HWND
(窗口)句柄可以在进程之间共享。
但是其他句柄呢,它们可以在进程之间共享吗?
HMODULE
,HINSTANCE
,ATOM
?
以及窗口和绘图组件:
HMENU
,HDC
,HICON
,HCURSOR
,HBRUSH
等?
最后,如果以上所有内容都无法共享,那么可以使用任何用户模式句柄吗?
编辑:澄清。通过共享,我的意思是从一个进程获取句柄的数值并在另一个进程中使用它。答案 0 :(得分:1)
HMODULE
和HINSTANCE
在32位和64位Windows上是相同的。它是模块的基地址,并且不能真正在进程间共享(除了ntdll和kernel32的地址,如果其他进程具有相同的位数)。
ATOM
以进程和全局形式出现,全局表单可以由同一windowstation上的进程共享。
无法共享GDI绘图句柄(可能GetStockObject
除外?)。
在Windows NT下,GDI对象存储在Win32子系统的GDI模块的客户端部分中。这意味着any GDI object is valid only in the context of the application that created it。
可以共享USER32句柄(HWND,HMENU,HICON,HCURSOR)。
DuplicateHandle
接受桌面和windowstation句柄...