2017-02-28 146 views
0

我試圖用Intel Pin來測試一個COM DLL。不幸的是,英特爾引腳設計用於獨立processes,而不是DLL。攔截COM dllhost.exe調用

所以我的問題是 - 是否有可能影響COM用來啓動inproc服務器主機(dllhost.exe)的命令行,以便我可以用dllhost.exe作爲參數調用pin.exe?或者調用dllhost.exe硬編碼到Windows中,這意味着我的想法是徒勞的?

+0

不是硬編碼的,它在註冊表中。您需要在CLSID註冊表項中聲明的AppId guid。然後在HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Classes \ AppID中查找它。 DllSurrogate值告訴它它需要被託管,當該值爲空時,它將是dllhost.exe。您可以將其更改爲其他可執行文件。不限於使用不同名稱的dllhost.exe副本,無論您需要什麼觸發器。 –

回答

2

DLLHost.exe是DLL代理的一個示例,它允許您在單獨的可執行文件中實例化DLL COM服務器。您可以使用DllSurrogateExecutable註冊表項指定要使用的任意可執行文件,並且您可以實現自己的DLL代理可執行文件code,該代碼可直接使用Pin。

當然,一個單獨的問題是如何創建COM對象。只有當類註冊的AppID指定它可以使用DLL替代品 COM對象的創建者指定CLSCTX_LOCAL_SERVER到CoCreateInstance等時,才使用DLL代理項。如果是這種情況,您可能需要修改調用者來更改上下文。

爲了找出你的類在你的類下注冊的AppID,可以使用OleView等工具,但是從註冊表編輯器中執行並不困難。如果您獲得CLSID GUID,請在HKEY_CLASSES_ROOT\CLSID\GUID下搜索。在那裏你可能會發現一個AppID值。這是一個指向HKEY_CLASSES_ROOT\AppID\GUID2的GUID,它包含它是否被註冊爲DLL代理項以及可以放置DllSurrogateExecutable項的位置。

+0

不錯的主意,謝謝。不幸的是寫一個[自定義代理](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682432(v = vs.85).aspx)似乎很複雜:)但肯定是可行的。 – rustyx