Über Handles



  • Hallo!

    Handles werden ja unter Windows bekanntlich dazu verwendet um dem Kernel die alleinigen Zugriffsrechte auf ein bestimmtes Objekt zu geben. Er kann es dadurch im Speicher herumschieben usw.
    Jetzt frage ich mich, ob alle APIs, die Handles verwenden (angefangen bei HWND Zeugs über GDI und und und) schlussendlich ihre Arbeit im Kernelmode verrichten oder ob der Object Manager (das Kernelmodul, das sich um die Handles kümmert) auch eine Funktion im UserMode aufrufen kann um die Daten an dem eigentlichen Objekt hinter einem Handle zu verändern.



  • tommazzo schrieb:

    Handles werden ja unter Windows bekanntlich dazu verwendet um dem Kernel die alleinigen Zugriffsrechte auf ein bestimmtes Objekt zu geben.

    Nein. Handles werden nur dazu verwendet, um in einem bestimmten Prozess auf ein Bestimtes Objekt im Objekt-Manager zu verweisen. Ein Objekt kann aber von mehreren Prozessen verweisen werden (z.B. Mutex/Event/Memory-Mapped-Files/usw.).

    tommazzo schrieb:

    Er kann es dadurch im Speicher herumschieben usw.

    ??? Ein Handle ist einfach eine Zahl, welches auf eine internen Liste des Prozesses verweist...

    tommazzo schrieb:

    Jetzt frage ich mich, ob alle APIs, die Handles verwenden (angefangen bei HWND Zeugs über GDI und und und) schlussendlich ihre Arbeit im Kernelmode verrichten oder ob der Object Manager (das Kernelmodul, das sich um die Handles kümmert) auch eine Funktion im UserMode aufrufen kann um die Daten an dem eigentlichen Objekt hinter einem Handle zu verändern.

    Die Frage verstehe ich nicht... das Objekt kann sich natürlich jederzeit ändern, da ja mehrere Zugriff auf das gleiche Objekt haben können...



  • Meine Hauptfrage war im Prinzip:
    Sitzt der Code, der die Datenstrukturen manipuliert, auf die die Handles im Object-Manager verweisen, nur im Kernel oder kann der auch im Usermode laufen?



  • Welche Datenstruktur meinst Du denn jetzt? Die Handles sind im ObjektManager eingetragen und somit sind sie im Kernel-Mode...
    Siehe auch:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Kernel_r/hh/Kernel_r/k107_d834e79e-f50e-4441-8a8a-9b093a0f77ab.xml.asp

    Add: PS: Wenn Du Deine Frage so gestellt hättest wie in "microsoft.public.win32.programmer.kernel" wäre sie auch einfacher verständlich gewesen 😉



  • Jochen Kalmbach schrieb:

    Add: PS: Wenn Du Deine Frage so gestellt hättest wie in "microsoft.public.win32.programmer.kernel" wäre sie auch einfacher verständlich gewesen 😉

    Ja ich sollte wohl lernen mich besser auszudrücken :), so wie hier

    Eine Frage muss ich jetzt doch noch anhängen:
    Sitzt GDI und die restliche GUI komplett im Kernel oder nicht?



  • GDI (oder besser gesagt die Fenster- und Nachrichtenverwaltung) sitzt im Kernel. Der Grund war einfach: bessere Performance



  • Das ist einläuchtend. Also ein Teil sitzt im Kernel, der Rest im Usermode.
    Vielen Dank nochmal!



  • Kümmert der Object Manager sich nicht eigentlich nur um die Kernel-Objekte und nicht die User- und GDI-Objekte?



  • Ja, die GDI-Objekte haben AFAIk nichts mit dem Object-Manager zu tun... müsste mich aber jetzt aber zuerst auch mal genau schlau machen, wie und wo diese verwaltet werden...PS: Wurde das nicht im Video erklärt?



  • Nein, im Video wurde nur erklärt wie der Object Manager selbst arbeitet, wie Handles aufgebaut sind und dass Requests weitergeleitet werden können (Bsp anhand von Registry und FS), aber über GDI haben sie kein Wort verloren.


Anmelden zum Antworten