2009-11-18 18 views

Odpowiedz

2

Możesz wypróbować IDispatch/IDispatchEx, jeśli chcesz po prostu wiedzieć, jakie metody można wywołać od konsumenta.

W COM, metoda QueryInterface na IUnknown nie jest wymagana do ujawnienia, jakie interfejsy mogą zwracać. Pytasz o jeden oparty na jego IID i albo go dostaniesz, albo nie. Implementacja QI w konkretnym obiekcie COM różni się znacznie, chociaż ma być zgodna z wzorcem opisanym przez Microsoft tutaj - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx.

+0

Jeśli nie zapamiętasz źle, przy pomocy IDispatch/IDispatchEx złapiesz interfejsy z atrybutem oleautomation w IDL. –

2

Dependency Walker nie pokaże interfejsów, ponieważ jedynymi eksportami są DllGetClassObject, DllRegisterServer, itp. (Dla hostowanego przez DLL modelu COM).

Możesz, jak mówi weismat, sprawdzić pliki TLB. Wiele obiektów COM zawiera osadzone typy w sekcji zasobów pliku wykonywalnego. Za pomocą narzędzia takiego jak hacker zasobów można wyodrębnić TLBy i użyć funkcji LoadTypeLib COM, aby uzyskać wskaźnik do interfejsu ITypeLib (można oczywiście użyć LoadTypeLib/LoadTypeLibEx bezpośrednio z DLL COM lub EXE).

Ten interfejs umożliwia przeglądanie typów zawartych w tym interfejsie.

+2

Ocena zawartości TLB nie spowoduje jednak ujawnienia informacji na temat jakichkolwiek prywatnych interfejsów, których może używać obiekt COM. –

+0

Prywatne interfejsy COM nie pojawią się, masz rację. –

Powiązane problemy