我可以从COM Dispatch Interface获取用于挂接的函数指针吗? (不是双接口)
|
我可以问一下COM Distach接口中的挂钩方法吗?
最近,我正在开发一些实用程序,它是一种COM监视工具。
而且我正在尝试在运行时钩住Com对象的界面。
为此,我需要使用类型lib。
以下是我的代码概述。
// 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对象只有Dispatch接口(不是Dual),则VTable中没有函数指针。
只有MFC的函数指针,例如GetTypeInfoCount,GetTypeInfo,GetIDsOfNames,Invoke。
此外,对于所有属于该接口的函数,pfuncdesc-> oVft始终为0。
我知道当我使用这类com对象时,应该使用\'Invoke \'方法。
但是问题是我试图钩住。我需要函数指针。
我如何从IDispatch获取那些函数指针?
IDispatch-> vtable中只有MFC的函数指针。
任何建议将被认真考虑。
谢谢你
没有找到相关结果
已邀请:
1 个回复
甲车劲