Могу я спросить кое-что о методе подключения в интерфейсе 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-объект имеет только диспетчерский интерфейс (не двойной), в VTable нет указателей на функции.
Есть только указатели функций MFC, такие как GetTypeInfoCount, GetTypeInfo, GetIDsOfNames, Invoke.
более того, pfuncdesc-> oVft всегда равно 0 для всех функций, принадлежащих этому интерфейсу.
Я знаю, что я должен использовать метод Invoke, когда использую такие объекты com.
Но проблема в том, что я пытаюсь зацепить. Мне нужны указатели на функции.
Как я могу получить эти указатели на функции из IDispatch?
В IDispatch-> vtable есть только указатели функций MFC.
любой совет будет оценен.
Спасибо.