c ++ - Hvilke Win32-brugerhåndtag kan deles mellem processer?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har forsøgt at bedre forstå WinAPI'er og den underliggende Windows-kerne. Fra det jeg ser hidtil kan HWND (vindues) håndtag deles mellem processer.


Men hvad med andre håndtag kan de deles mellem processer?


HMODULE, HINSTANCE, ATOM? [15]


Samt vindue og tegning komponenter:


HMENU, HDC, HICON, HCURSOR, HBRUSH osv.?


Og endelig, hvis alle ovenstående ikke kan deles, er der nogen brugerhåndtag, der kan være?


EDIT: Clarification. Ved deling mente jeg at tage håndtagets numeriske værdi fra én proces og bruge den i en anden proces.

Bedste reference


HMODULE og HINSTANCE er det samme på 32 og 64-bit Windows. Det er basisadressen til et modul og kan ikke rigtig deles på tværs af processer (undtagen adresserne til ntdll og kernel32, hvis den anden proces har det samme vidnesbyrd).


ATOM s kommer i per-proces og globale former, og den globale form kan deles af processer på samme vinduestation. [16]


GDI tegning håndtag kan ikke deles (undtagen måske GetStockObject?).



  Under Windows NT gemmes GDI-objekter i klientdelen af ​​Win32-delsystemets GDI-modul. Det betyder, at ethvert GDI-objekt kun er gyldigt i forbindelse med det program, der oprettede det. [17]



USER32 håndtag (HWND, HMENU, HICON, HCURSOR) kan deles.


DuplicateHandle accepterer desktop- og vinduestationshåndtag ...