我是一个非常密集的Office插件。
除了标准的Office扩展点之外,我还挂了许多Win32 API,例如kernel32!CreateFileW,ole32!StgCreateStorageEx等(我正在使用IAT挂钩)。
然而,我无法解决的一个问题(尽管不可思议地工作arround)是从hwnd获得一个文档接口的poiner。
但是,我注意到Office(在所有程序中,在所有版本中)都在GWL_USERDATA的Windows存储中放置一个指针 - 可能是内部对象。
我怎么知道这是一个指向对象的指针?因为它的第一个DWORD是一个指向v-table的指针(一堆地址,所有都以'push ebp,move ebp,esp'开头)。此外,此v表的前3个方法似乎具有IUnknown逻辑(第一个方法调用MsoHrSimpleQueryInterface2,第二个方法执行'inc'并返回增量值,第三个方法似乎执行通常的Release逻辑)。
然而,我无法取得更大的进步。我正在尝试对这个对象进行各种QueryInterface调用,而我正在尝试阅读其他方法 - 没有太多运气。
我想知道是否有人在这条道路上走得更好?