簡體   English   中英

從第三方軟件識別/列出COM對象和屬性

[英]Identifying/Listing COM Objects and Properties from third party software

我正在嘗試設計一個可以在任何不同的應用程序上識別COM對象及其屬性的應用程序。 這是我第一次嘗試這樣做,而且我不確定從哪里開始。 理想情況下,它將使用Delphi XE2制作,但我願意接受建議。

如果我有CLSID,有沒有辦法“掃描”正在運行的應用程序以查找基於它的對象? 或者,換句話說,是否有更好的方法在任何正在運行的應用程序中列出/查找活動對象?

非常感謝任何幫助,以及關於該主題的良好文檔的任何指示。

編輯:問題實際上是在任何其他應用程序中查找COM對象,列出屬性以及我需要的其他問題已在其他問題中得到解答。

無法掃描正在運行的COM對象。 一旦它們被實例化 - 它們只是由其他東西引用的內存塊(成員接口指針變量等)。

有時將對象放在運行對象表( ROT )上,您可以從那里檢索它們,如注釋中已建議的那樣。 這個屬性,比方說,是COM對象實例的1%,但也許你很幸運能夠追逐那些。

我能想到的唯一方法是掛鈎COM對象實例化,以便您攔截創建,然后能夠跟蹤您自己的現有實例列表。 這也不是一種簡單的方法(也很可能是不安全的)。

要實現這一點,您需要在您感興趣的CLSID的運行進程的上下文中注冊您的類對象,並讓您的類工廠接收實例化調用。 或者,鈎子CoCreateInstance API,例如Detours

一旦你掛鈎實例化,你就會在創建對象時有指針,你又需要對它們做一些事情。 您可能希望將這些實例化調用轉發到原始API,然后跟蹤實例的生命周期 - 如果您對該對象進行額外引用,則可能會改變應用程序的原始行為。 否則,您無法控制COM對象釋放。 有時可以聚合創建COM類,您可以或多或少地將原始實例簡潔地嵌入COM對象中。

總而言之,總的來說,任務似乎不可行。 擁有特定的CLSID ,有一定的運氣和相當大的努力,你可能會成功地做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM