| |
|
|
| So, habe mir mit [...] mal Handles von Speicherobjekten etwas näher angesehen. 1) Mit GlobalAlloc erhalte ich ein Handle eines Speicherblockes den ich als moveable erstelle. 2) Nun tue ich so, als wäre das Handle eine Speicheradressen und lese den entsprechenden Speicherbereich als 4 Byte Doubleword mit Tasks and Token aus. 3) An der Adresse, die ich da ausgelesen habe, steht die augenblickliche Startadresse des Speicherblocks (zu überprüpfen durch GlobalLock oder auch GlobalHandle). 4) Die Adresse liegt, laut Tasks and Token, in einem Heap. 5) Am Ende des (leeren) Speicherblocks steht die Heapkontrollstruktur. 6) Das erste Doubleword der Heapkontrollstruktur ist wieder das Handle des Bereichs. 7) Ist der durch GlobalAlloc erzeugte Speicherbereich not moveable, ist das zurückgelieferte Handle direkt die Adresse des Speicherbereichs.
So, ich hoffe ihr kontet mir folgen - jetzt kommen meine Fragen: a) Wie sieht das bei User-, GDI- und vor allen Dingen Kernel-Objekthandles aus??? Hat jemand Infos dazu? b) Wie genau ist eine Heapkontrollstruktur aufgebaut? Gibt es dazu nähere Infos, oder muß man da selbst nachforschen???
Im Augenblick hört sich das ganze vielleicht sehr abstrakt an, ich habe damit aber ziemlich handfeste Sachen vor...
(in der Hoffnung auf Hilfe und gute Ratschläge)
Andreas |
|
|
| |
|
|
|
| Ich mache mal etwas deutlich worum es mir geht: Ich habe im Augenblick die Theorie, das hinter jedem Handle ein Speicherbereich in einem Prozess steckt, der entweder zugewiesen oder freigegeben wird (oder auch mehere Speicherbereiche?). Im Augenblick geht es mir darum, diese Theorie entweder zu Beweisen oder zu verwerfen... Sollte sich meine Theorie bestätigen, könnte man einem Handle immer bestimmte Speicherbereiche zuordnen - und diese evtl. (für den eigenen Prozess) direkt ändern.
Wer hat von Handles und Adressen etwas mehr Ahnung als ich und kann mich diesbezüglich etwas aufklären ? (bitte nochmals um etwas Hilfe oder gute Ratschläge...)
Beste Grüße
Andreas |
|
|
| |
|
|