?
Hallo.
"offenes Handle"
Zu den HANDLEs kann ich sagen, das Windows systemintern zu jeder PID (oder sonstigem Objekt, das mit mit H... (z.B. HDC) aus dem Kernel kommt) für jedes Handle einen Zähler hat. Erzeugst Du Dir mit GetCurrentProcess() ein Handle, dann hast Du ein Pseudohandle. Das ist quasi gemappt (copy by value) auf das echte Handle. Der Wert sollte dieser sein: echtesHandle - 1 = pseudoHandle. Der Handle-Zähler des Systems wird NICHT inkrementiert. Das zeigt sich darin, dass CloseHandle(pseudeHandle) nichts macht. Trotzdem kannst Du IN dem Prozess, auf den sich das Pseudohandle bezieht, mit diesem viel Quatsch machen .
Willst Du aus diesem "weichen" Handle aber ein "hartes" Handle machen, brauchst Du DuplicateHandle(pseudoHandle,pseudoHandle,pseudoHandle,&pseudoHandle,...);.
Jetzt ist Dein PseudoHandle "hart". Der Handle-Zähler Deines Prozesses wurde inkrementiert. Machst Du nun ein CloseHandle(pseudoHandle), lebt Dein Prozess weiter, aber der Zähler des Systems für Deinen Prozess wurde dekrementiert.
Kleiner Tipp am Rande: Alles, was SECURITY_ATTRIBUTES verlagt, kommt aus dem Kernel.