2010-11-23 27 views
5

我一直在尋找的vsjitdebugger.exe註冊表訪問使用Process Monitor,我注意到有時它查詢以下列方式註冊表(一些信息被遺漏):COM TreatAs如何(以及何時)工作?

HKCU\Software\Classes\CLSID\{some-guid} NAME NOT FOUND Desired Access: Read 
... 
HKCU\Software\Classes\CLSID\{some-guid}\TreatAs NAME NOT FOUND Desired Access: Query Value 
... 
HKCU\Software\Classes\CLSID\{some-guid}\InprocServer32 NAME NOT FOUND Desired Access: Read 
... 
HKCR\CLSID\{24E669E1-E90F-4595-A012-B0FD3CCC5C5A}\InprocServer32 SUCCESS Desired Access: Read 

TreatAs on MSDN資料顯示,它允許指定另一個COM服務器的GUID將被調用,而不是原來的。我不能在自己的COM對象上使用它:我有兩個不同的相同COM對象的實現(在2個獨立的DLL中,有2個獨立的GUID),當我的進程通過GUID創建對象時,我希望它創建另一個對象(通過在TreatAs中指定的GUID)。不幸的是,Windows似乎立即試圖查詢HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32,而不是首先查找TreatAs。

我的問題基本上是關於治療的規則,何時以及如何得到查詢?

回答

2

TreatAs功能的工作原理很簡單:一起CoCreateInstance請求的COM對象的實例,爲TreatAs COM子系統檢查重點,並發現時,嘗試實例替換/仿真類,並透明地返回它,而不是要求CLSID。調用者因此透明地獲得仿真對象的接口。

該功能很少使用,但仍然使用。您可以使用EnumerateTreatAsClasses實用程序枚舉當前有效的TreatAs類。該特性是鉤住COM類實例化的方法之一。

+0

即使我在3年前問過這個問題,我很欣賞答案:) – 2013-06-16 18:45:33

相關問題