Frage zur Handle-Vererbung



  • Ich starte einen neuen Prozess. Ich hab gelesen, dass man dabei Handles vererben kann. Konkreterweise habe ich ein Handle auf eine Datei (via CreateFile geöffnet). Wenn ich nun einen anderen Prozess starte und dabei angebe dass Handles vererbt werden dürfen, kann dann der andere Prozess sich das Handle via Interprocess Communication besorgen und das Handle schließen? Wenn das Handle geschlossen ist, ist es dann in beiden Prozessen geschlossen?



  • Natürlich kannst du nen HANDLE vererben das ist doch ein ganz normaler Datentyp. Aber was bringt dir das? Du wirst probleme kriegen, wenn deine Threadfunktion eine Methode ist, weil der Methode nur ein Parameter angefügt werden darf und Methoden automatisch als erster Paramter der this-Zeiger mitgeliefert wird. Im Übrigen habe ich deine Frage nicht ganz verstanden.



  • Da hast du mich grundlegend falsch verstanden. Es geht mir nicht um objektorientierte Programmierung, sondern um die Vererbung eines HANDLEs. Also so dass ein anderer Prozess ein HANDLE übernehmen kann. Ein wenig Interprocess Communication quasi.



  • Wenn das Handle geschlossen ist, ist es dann in beiden Prozessen geschlossen?

    Nein. Das Handle wird dupliziert. Stell Dir einfach einen internen Aufruf von DuplicateHandle vor.

    [edit] Ich meine natürlich nicht, daß das Handle dupliziert wird, wenn Du es schließt. Das passiert, wenn der Child-Process es erbt. Das wollte ich sagen. [/edit]

    [ Dieser Beitrag wurde am 24.04.2003 um 19:40 Uhr von -King- editiert. ]



  • Schonmal besten Dank, King. Ist ein HANDLE denn nun aber fest mit einem Prozess verknüpft? Also könnte ich einfach ein HANDLE via Interprocess Communication übertragen und es von einem Prozess schließen lassen, der es nicht geöffnet hat?



  • CreateFile erzeugt ein Kernel-Object. Das Objekt wird aber erst abgebaut, wenn der Zähler bei null angekommen ist. Vererbst du es jetzt wird der zähler um eins erhöht. Schließt der Prozess das Handel, der es geerbt hat wird der Zähler um eins erniedrigt. Ist der Zähler ungelich null, wird das Objekt auch nicht entfernt.



  • Also könnte ich einfach ein HANDLE via Interprocess Communication übertragen und es von einem Prozess schließen lassen, der es nicht geöffnet hat?

    Nein, das funktioniert so nicht. Das gibt durcheinander. Du kannst aber beispielsweise mit SendMessage zum einen das Handle übertragen und zum anderen den zugehörigen Process-Identifier. Der andere Process kann sich nun selbst mit OpenProcess/DuplicateHandle eine Kopie ziehen. Hast Du Deine Kopie, kann der erste Process das Hanlde gefahrlos schliessen.

    [edit] Muß natürlich nicht SendMessage sein, das funktioniert mit jeder Art von IPC. Wichtig ist, daß zum Handle der Process-Identifier übertragen wird, damit Du Dir die Kopie ziehen kannst. [/edit]

    [ Dieser Beitrag wurde am 25.04.2003 um 21:15 Uhr von -King- editiert. ]


Anmelden zum Antworten