Sie können versuchen mein Beispiel für das Hooking der Direct3D 9 API mit C# . Dabei wird EasyHook verwendet, eine Open-Source-.NET-Assembly, mit der Sie Hooks aus verwaltetem Code in nicht verwaltete Funktionen installieren können.
Außerdem wird SlimDX verwendet, ein quelloffener, verwalteter Wrapper für die Direct3D-Bibliotheken.
Der knifflige Teil des Hookings ist die Ermittlung der Adressen der virtuellen Funktionen eines COM-Objekts. Dies geschieht im obigen Beispiel mit einer kleinen C++-Hilfs-DLL, die die Adressen aus der VTable ermittelt. [Update: es gibt einen Kommentar gepostet, die zeigt, wie die Funktion Zeiger aus der VTable in C# auch erhalten - gegeben eine IntPtr auf das COM-Objekt]
Das Beispiel greift auf die EndScene-Methode eines IDirect3DDevice9 zurück, wo auch die Overlays gezeichnet werden sollen. Was die Anzeige eines Formulars im Overlay betrifft, bin ich mir nicht sicher, ob das so einfach sein wird - ich meine, Sie können das Bild leicht genug rendern, aber Sie müssen Eingaben erfassen und manuell auf die Ereignisse reagieren bzw. diese an das betreffende Formular weiterleiten. Viel Glück!