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

Which Win32 user-mode handles can be shared among processes?

我一直在努力更好地理解 WinAPI 和底层 Windows 内核。据我目前所见,HWND (window) 个句柄可以在进程之间共享。

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

HMODULE, HINSTANCE, ATOM?

以及window和绘图组件:

HMENUHDCHICONHCURSORHBRUSH等?

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

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

HMODULEHINSTANCE 在 32 位和 64 位 Windows 上是一样的。它是模块的基地址,不能真正跨进程共享(如果其他进程具有相同的位数,则 ntdll 和 kernel32 的地址除外)。

ATOMs 以每个进程和全局形式出现,全局形式可以由同一 windowstation.

上的进程共享

无法共享 GDI 绘图句柄(也许 GetStockObject 除外?)。

Under Windows NT, GDI objects are stored in the client part of the Win32 subsystem's GDI module. That means that any GDI object is valid only in the context of the application that created it.

可以共享 USER32 个句柄(HWND、HMENU、HICON、HCURSOR)。

DuplicateHandle 接受桌面和 windowsstation 句柄...