2009-11-18 33 views

Trả lời

2

Bạn có thể thử IDispatch/IDispatchEx nếu bạn chỉ muốn biết những phương thức nào có thể gọi được từ người tiêu dùng của bạn.

Trong COM, phương thức QueryInterface trên IUnknown không được yêu cầu để hiển thị giao diện mà nó có thể trả về. Bạn yêu cầu một dựa trên IID của nó và bạn có nhận được nó hay không. Việc thực hiện QI trong một đối tượng COM cụ thể thay đổi đáng kể mặc dù nó phải tuân theo mô hình được mô tả bởi Microsoft ở đây - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx.

+0

Nếu không nhớ xấu, với IDispatch/IDispatchEx bạn sẽ bắt được giao diện với thuộc tính oleautomation trong IDL. –

2

Phụ thuộc Walker sẽ không hiển thị các giao diện khi xuất khẩu duy nhất là DllGetClassObject, DllRegisterServer, v.v ... (cho DLL được lưu trữ COM).

Bạn có thể, như weismat nói, kiểm tra các tệp TLB. Nhiều đối tượng COM chứa các typelib nhúng trong phần tài nguyên của tệp thực thi. Với một công cụ như hacker tài nguyên, bạn có thể trích xuất TLB và sử dụng các hàm LoadTypeLib COM để nhận con trỏ tới giao diện ITypeLib (bạn có thể sử dụng LoadTypeLib/LoadTypeLibEx trực tiếp với một COM hoặc EXE DLL, tất nhiên).

Với giao diện này, bạn có thể lặp qua các loại chứa bên trong.

+2

Đánh giá nội dung của TLB sẽ không tiết lộ thông tin về bất kỳ giao diện riêng nào mà đối tượng COM có thể đang sử dụng. –

+0

Giao diện COM riêng tư sẽ không xuất hiện, bạn nói đúng. –

Các vấn đề liên quan