哪些Win32用户模式句柄可以在进程间共享?

时间:2017-10-26 03:16:45

标签: c++ windows winapi kernel handles

我一直在努力更好地了解WinAPI和底层Windows内核。从我到目前为止看到的,HWND(窗口)句柄可以在进程之间共享。

但是其他句柄呢,它们可以在进程之间共享吗?

HMODULEHINSTANCEATOM

以及窗口和绘图组件:

HMENUHDCHICONHCURSORHBRUSH等?

最后,如果以上所有内容都无法共享,那么可以使用任何用户模式句柄吗?

编辑:澄清。通过共享,我的意思是从一个进程获取句柄的数值并在另一个进程中使用它。

1 个答案:

答案 0 :(得分:1)

HMODULEHINSTANCE在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句柄...