2010-11-23 13 views
5

私はProcess Monitorを使用してvsjitdebugger.exeのレジストリへのアクセスを見ていた、と私はは時々それは次のように(omitedいくつかの情報)でレジストリを照会していることに気づい:TreatAs on MSDNどのように(いつ)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 

情報は、それが指定できることを示して元のCOMサーバーの代わりに呼び出される別のCOMサーバーのGUID。

私はこのキーに関する多くの情報を見つけることができませんでした。自分のCOMオブジェクトでこれを使用することはできませんでした。同じCOMオブジェクトに対して2つの異なる実装があります。 2つの別々のGUID)、私のプロセスがGUIDを介してオブジェクトを作成するとき、代わりに(TreatAsで指定されたGUIDを介して)他のオブジェクトを作成したいと思います。残念ながら、WindowsはTreatAsを最初に探すのではなく、すぐにHKCU\Software\Classes\CLSID\{my-guid}\InprocServer32を照会しようとしているようです。

私の質問は基本的にTreatAsのルールです。いつ、どのように質問されるのですか?

答えて

2

TREATAS機能は非常に簡単に動作します、COMオブジェクトのインスタンスCoCreateInstanceにリクエストしてTREATASキーのCOMサブシステムをチェックし、見つかった場合は、代替/エミュレーション・クラスをインスタンス化し、透過的にそれを返す代わりに要求しようとしますCLSID。したがって、呼び出し側は、エミュレーションオブジェクトのインタフェースを透過的に取得します。

この機能はほとんど使用されませんが、まだ使用されています。 EnumerateTreatAsClassesユーティリティを使用して、現在アクティブなTreatAsクラスを列挙できます。この機能は、COMクラスのインスタンス化をフックする方法の1つです。

+0

私はこれを約3年前に尋ねましたが、私は答えを感謝します:) –

+0

私は偶然に質問に気づいた。私はTreatAsを使って自分の[DirectShowSpy](http://alax.info/blog/777)ツールでDirectShow Filter Graph Managerのインスタンシエーションをフックします。 –

関連する問題