2012-03-31 17 views
3

Ich versuche, die SetCooperativeLevel Funktion in das DirectDraw-Objekt zu haken. Mein Ziel ist dem in dieser Frage API Hook on a COM object function? sehr ähnlich, aber das einzige Problem ist, dass ich den genauen Versatz in IDirectDraw 's vtable für SetCooperativeLevel nicht kenne. Gibt es das überhaupt von vielleicht <ddraw.h> oder programmatisch?Index der bestimmten Funktion in V-Tabelle der COM-Schnittstelle suchen

Hier ist die Interface-Deklaration für IDirectDraw, aber ich bin mir nicht sicher, wie dies der Vtable entspricht.

+1

Zählen Sie einfach, beginnend bei 0. So ist es 20 * 4 für 32-Bit-Code, 20 * 8 für 64-Bit-Code. Achten Sie auf vererbte Schnittstellen. Dieser erbt nur IUnknown und hat bereits seine 3 Methoden aufgelistet. In IDL nicht typisch. –

Antwort

2

Meine eigene Frage beantworten: Die vtable ist in genau der gleichen Reihenfolge ausgelegt, in der die Schnittstellenfunktionen deklariert sind.

+0

Ja im Grunde müssen Sie zwei Dinge wissen - die tatsächliche Reihenfolge ist die Reihenfolge der Deklaration (einschließlich der vererbten Schnittstellen esp. IUnknown) und dass Sie eine Binärdatei mit bestimmten Aufruf erstellen können, legen Sie einen Haltepunkt, wechseln zu Disassembly und schnell nachschlagen Indexüberprüfung, welcher Compiler für eine bestimmte Methode generiert wurde. –