2

私は非常に集中的な Office プラグインを持っています。

標準の Office 拡張ポイントに加えて、kernel32!CreateFileW、ole32!StgCreateStorageEx などの多くの Win32 API をフックしています (IAT フックを使用しています)。

ただし、私が解決できなかった問題の 1 つは (どういうわけかうまくいきませんが)、hwnd から Document インターフェイスへのポインターを取得することです。

しかし、Office (すべてのプログラム、すべてのバージョン) がポインタ (おそらく内部オブジェクトへ) を Windows ストレージの GWL_USERDATA に置くことに気付きました。

これがオブジェクトへのポインタであることをどのように知ることができますか? 最初の DWORD は v テーブルのように見えるものへのポインターであるため (アドレスの束、すべて「ebp をプッシュ、ebp、esp を移動」で始まります)。さらに、この v-table の最初の 3 つのメソッドには IUnknown ロジックがあるようです (最初のメソッドは MsoHrSimpleQueryInterface2 を呼び出し、2 番目のメソッドは「inc」を実行してインクリメントされた値を返し、3 番目のメソッドは通常のリリース ロジックを実行するようです)。

それでも、私はそれ以上の進歩を遂げることができません。このオブジェクトに対してさまざまな QueryInterface 呼び出しを試みており、他のメソッドを読み取ろうとしていますが、うまくいきません。

誰かがこの道を行進してより良い結果を出したことがあるだろうか?

4

0 に答える 0