Process Monitorvsjitdebugger.exe
を使用してレジストリ アクセスを調べていたところ、次の方法でレジストリにクエリを実行する場合があることに気付きました (一部の情報は省略されています)。
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
MSDN の TreatAs に関する情報は、元のサーバーの代わりに呼び出される別の COM サーバーの GUID を指定できることを示しています。
このキーに関する詳細情報を見つけることができず、自分の COM オブジェクトで使用することもできませんでした: 同じ COM オブジェクトの 2 つの異なる実装があります (2 つの別個の DLL で、2 つの別個の GUID を持っています)。 、そして私のプロセスがGUIDを介してオブジェクトを作成するとき、代わりに他のオブジェクトを作成したいと思います(TeatAsで指定されたGUIDを介して)。残念ながら、WindowsHKCU\Software\Classes\CLSID\{my-guid}\InprocServer32
は最初に TreatAs を探すのではなく、すぐに を照会しようとするようです。
私の質問は基本的に、TreatAs のルールについてです。いつ、どのように照会されるのですか?