Iga*_*nik 5 com registry clsid
我正在查看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
Run Code Online (Sandbox Code Playgroud)
有关MSDN上的TreatAs的信息表明,它允许为另一个将被调用而不是原始服务器的COM服务器指定GUID.
我无法找到关于此密钥的更多信息,并且我无法在我自己的COM对象上使用它:我有两个不同的相同COM对象的实现(在2个单独的DLL中,有2个单独的GUID) ,当我的进程通过GUID创建对象时,我希望它创建另一个对象(通过TreatAs中指定的GUID).不幸的是,似乎Windows立即尝试查询HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32,而不是首先寻找TreatAs.
我的问题基本上是关于TreatAs的规则,何时以及如何被查询?
TreatAs功能的工作原理非常简单:请求CoCreateInstance,COM 子系统会检查 TreatAs 键,并在找到时尝试实例化替换/模拟类并透明地返回它而不是请求的 CLSID。这样,调用者就透明地获得了仿真对象的接口。
该功能很少使用,但仍在使用。您可以使用EnumerateTreatAsClasses实用程序枚举当前活动的 TreatAs 类。该功能是挂钩 COM 类实例化的方法之一。
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |