我已經被賦予了嘗試重新創建一個DLL的任務,這個DLL對原始DLL有輕微的修改,當另一個程序運行時它將被執行。基本上是用於測試/模擬較大系統其他部分的DLL的模擬版本。如何判斷庫是COM還是DCOM?
我查找是否有任何方法來檢查庫是COM還是DCOM,但沒有找到任何方法。我是aware of thedifferences,但給出了一個DLL庫,我該如何判斷它是COM或DCOM庫?
此外,有沒有辦法用新技術換出COM/DCOM庫,但不改變調用COM/DCOM庫的代碼部分?
我已經被賦予了嘗試重新創建一個DLL的任務,這個DLL對原始DLL有輕微的修改,當另一個程序運行時它將被執行。基本上是用於測試/模擬較大系統其他部分的DLL的模擬版本。如何判斷庫是COM還是DCOM?
我查找是否有任何方法來檢查庫是COM還是DCOM,但沒有找到任何方法。我是aware of thedifferences,但給出了一個DLL庫,我該如何判斷它是COM或DCOM庫?
此外,有沒有辦法用新技術換出COM/DCOM庫,但不改變調用COM/DCOM庫的代碼部分?
單獨擁有可執行代碼,除了如果代理/存根dll附帶它,你可以認爲它是DCOM,你不能分辨它是哪一個。
可見的區別在於事物的註冊方式。根據註冊的實施情況,挖掘註冊過程可能很容易,也可能不那麼容易。如果註冊參數是在代碼中手工粘貼的,則必須以更難的方式對其進行反向工程。如果註冊使用存儲在資源中的.rgs文件,則可以提取它並查看註冊是如何完成的。無論如何,最好的辦法是使用虛擬機並導出其註冊表,然後註冊該組件,再次導出註冊表並查看其中的差異 - 添加了哪些內容。
我注意到COM如何使用cocreateInstance函數,而DCOM是cocreateInstanceEx,其中調用可執行代碼的其他代碼使用該函數。這是確定庫是COM還是DCOM的可能方法? – matrixanomaly
@matrixanomaly'CoCreateInstanceEx()'允許在另一臺計算機上實例化一個DCOM服務器,但是您也可以使用'CoCreateInstance()'在同一臺計算機上實例化它。 – sharptooth
哇,你要去這裏讀書了!
如果我沒記錯的話,任何有效的COM對象也可以參與DCOM。操作系統級別的遠程過程調用的接線不是?
從https://msdn.microsoft.com/en-us/library/aa295360(v=vs.60).aspx:
一旦COM被改編通過網絡工作,那麼任何接口, 是不依賴於本地執行模型(一些接口對本地機器設備固有 的依賴,如那些繪製接口 ,其方法具有把設備上下文作爲參數的句柄)將具有分佈的能力:接口消費者將 請求給定的接口;可以通過在不同的 機器上運行(或運行)的對象的實例來提供該接口 。 COM內部的分配機制將 消費者連接到提供者,使得由 消費者進行的方法調用將出現在提供者端,其將執行 。任何返回值然後將被髮回給消費者。 對於所有意圖和目的,分銷行爲對於消費者和提供者都是透明的。
現在已經存在如此多種COM。 DCOM(用於'分佈式COM')是 附帶版本的Windows NT從版本4.0開始。由於 1996年末,它也可用於Windows 95及其衍生產品 。在這兩種情況下,DCOM都包含一組替代和附加DLL,以及一些實用程序,這些實用程序既提供本地COM功能,也提供遠程COM功能。因此,它現在是基於Win32的平臺的固有部分,並且隨着時間的推移,其他組織將在其他平臺上提供其他平臺 。
是的,我知道是的,我現在的實習是讓我嘗試用模擬的函數替換掉一個函數庫,返回true/false來測試系統的一個大部分。無法幫助我不容易獲得上述圖書館的來源。當我提到它時,所有完成COM/DCOM(沒有那麼多)的人都會呻吟,對我感覺不好。謝謝。 – matrixanomaly
今天Windows仍然在使用COM。 DCOM並不總是意味着「交易」。這只是他們在通過網絡添加COM的能力時想出的一個奇特名稱。與此同時,由於這個原因,他們刪除了對Windows進程間通信的嚴重依賴,儘管它仍然被使用/可用。 –
幾乎每個COM服務器都能夠在不更改可執行文件的情況下進行DCOM,只需要額外的配置即可。關注它現在如何被使用。 –
感謝您的建議。看着它! – matrixanomaly