Могу я спросить кое-что о методе перехвата в интерфейсе 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.
Любой совет будет оценен.
Спасибо.