gpt4 book ai didi

com - COM TreatAs 如何(以及何时)起作用?

转载 作者:行者123 更新时间:2023-12-04 21:25:21 25 4
gpt4 key购买 nike

我正在查看 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

关于 TreatAs on MSDN 的信息表明它允许为另一个 COM 服务器指定一个 GUID,而不是原始的。

我无法找到有关此 key 的更多信息,也无法在我自己的 COM 对象上使用它:我有同一个 COM 对象的两个不同实现(在 2 个单独的 DLL 中,有 2 个单独的 GUID) ,并且当我的进程通过 GUID 创建对象时,我希望它改为创建另一个对象(通过 TreatAs 中指定的 GUID)。不幸的是,Windows 似乎立即尝试查询 HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32。 ,而不是首先寻找 TreatAs。

我的问题基本上是关于 TreatAs 的规则,何时以及如何查询它?

最佳答案

TreatAs 功能非常简单:向 CoCreateInstance 发出请求COM 对象的一个​​实例,COM 子系统检查 TreatAs 键,并在找到时尝试实例化替换/仿真类并透明地返回它而不是请求的 CLSID。因此,调用者透明地获得了仿真对象的接口(interface)。

该功能很少使用,但仍然使用。您可以使用 EnumerateTreatAsClasses 枚举当前事件的 TreatAs 类。效用。该功能是 Hook COM 类实例化的方法之一。

关于com - COM TreatAs 如何(以及何时)起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com