我正在查看vsjitdebugger.exe
使用Process Monitor的注册表访问,我注意到有时它以以下方式查询注册表(省略了一些信息):
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 个单独的 DLL 中,有 2 个单独的 GUID) ,并且当我的进程通过 GUID 创建对象时,我希望它改为创建另一个对象(通过 TreatAs 中指定的 GUID)。不幸的是,Windows 似乎立即尝试查询HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32
,而不是首先寻找 TreatAs。
我的问题基本上是关于 TreatAs 的规则,何时以及如何查询它?