请问COM Distach Interface中的hook方法?
最近,我正在制作一些实用程序,它是一种 COM 监控工具。
我试图在运行时挂钩 Com 对象的接口。
为此,我需要使用类型库。
以下是我的代码大纲。
// Load Type Lib.
LoadRegTypeLib( TypeLibCLSID , wMajorVersion , wMinorVersion , lcid , &pTypeLib );
// Get Function Descriptor
pInterfaceTypeInfo->GetFuncDesc( iii , &pfuncdesc );
// Create Instance and Get Interface
CoCreateInstance( pClassAttr->guid , NULL, ClassContext, pInterfaceAttr->guid , (void**)&pUnknownObject );
// Get VTable
dwOrgFunctionPointer = *(DWORD*)pUnknownObject;
// adjust offset
dwOrgFunctionPointer += pfuncdesc->oVft;
// Get Function Pointer
dwOrgFunctionPointer = *(DWORD*)dwOrgFunctionPointer ;
// Hook
MyHookMethod( dwOrgFunctionPointer );
这是成功的,直到我找到了一些具有调度接口(非双)的 Com 对象。
如果某些 Com Object 只有 Dispatch Interface(不是 dual ),则 VTable 中没有函数指针。
只有 MFC 的函数指针,如 GetTypeInfoCount、GetTypeInfo、GetIDsOfNames、Invoke。
此外,pfuncdesc->oVft 始终为 0,因为所有函数都属于该接口。
我知道在使用这类 com 对象时应该使用“调用”方法。
但问题是我想上钩。我需要函数指针。
如何从 IDispatch 获取这些函数指针?
IDispatch->vtable 中只有 MFC 的函数指针。
任何建议将被认真考虑。
谢谢你。