Kleine Korrektur zum vorherigen Post:
@TE: Du hast doch richtig dereferenziert, ich hatte nen kleinen Denkfehler.
(geht nun auch an Cox)
Die VTable wird von VisualStudio (und den meisten anderen Compilern auch) durch ein simples Array mit den Funktionsadressen realisiert.
Für jede virtuelle Funktion gibt es einen Eintrag und für jede Klasse, die von der Oberklasse abgeleitet wird, gibt es eine eigene Table.
Natürlich hat nicht jedes Objekt die Table selbst, sondern das erste Element ist nur ein Pointer auf jene (dein Doppelpointer hat mich erst verwirrt).
Da DX im Grunde nur auf virtuelle Funktionen setzt, um so die Implementierung zu verstecken, gibt es in einer Dll für ein bestimmtes System auch nur eine einzige Klasse, die abgeleitet wird und dementsprechend eine andere VTable hat, als die Basisklasse (welche in dem Fall gar keine hat, da sie abstrakt ist und keine ihrer Methoden definiert).
Diese ist aber, wie gesagt, nur in der Dll verfügbar.
Außerhalb ist sie gar nicht bekannt, man kennt ja schließlich auch nicht die Deklaration (nur die der Basisklasse), da wird also auch nichts exportiert.
Das einige Debugger und Analyse Tools die Namen anzeigen können, hat andere Gründe.
Schaut mal in die Export Table. Die virtuellen Methoden wie EndScene werden nicht exportiert (was auch gar nicht möglich ist).
Nur eine Funktion, die einem einen Pointer auf ein Direct3D9 Objekt liefert (oder ein Objekt, das von diesem abgeleitet ist) und mit diesem kann man wiederum ein Device erstellen, welches die Methode EndScene anbietet - via VTable - ein Export ist gar nicht notwendig.
Das was Pain vermutlich auch meinte, ist die Technik, die Methode D3DCreate9 oder so zu hooken und dann wiederum die CreateDevice Methode zu hooken, um dann den Device Pointer abzufangen.
Dann könnte man entweder, wie es der TE versucht, direkt die VTable patchen und die eigene Adresse einfügen (was einige auch tun, es ist also möglich ;O) oder ein komplett eigenes Dummy Device zurückgeben, welches alle Methodenaufrufe einfach an das originale weiterleitet, bis auf die, die man hooken möchte.
Das macht aber wie gesagt zu viel Arbeit und bringt mehr Nachteile als Vorteile.
Und weiterhin wird mit der Methode D3DCreate9 nicht gezeichnet ;O