首页 新闻 会员 周边

根据CLSID如何获取一个COM接口的名称?

0
悬赏园豆:20 [已解决问题] 解决于 2013-10-22 17:24

已经com组件名的CLSID为: {1f486a52-3cb1-48fd-8f50-b8dc300d9f9d} ,win7的系统,这个应该是系统的一个COM组件的CLSID, 但如何找出对应的COM接口名称呢? 或者注册表中怎么搜索呢?对应关系是怎么样的?

这个参数我是拦截了CoCreateInstance抓到的,完整参数如下:

函数原型为:
HRESULT WINAPI CoCreateInstance(REFCLSID rclsid,
 LPUNKNOWN pUnkOuter,
 DWORD dwClsContext,
 REFIID riid,
 LPVOID FAR* ppv);


参数编号 参数类型 参数名 调用前值 调用后值
1 REFCLSID rclsid 0x758a30a8 = {1f486a52-3cb1-48fd-8f50-b8dc300d9f9d} 0x758a30a8 = {1f486a52-3cb1-48fd-8f50-b8dc300d9f9d} 2 LPUNKNOWN pUnkOuter 0x00000000 0x00000000 3 DWORD dwClsContext 1 1 4 REFIID riid 0x758a3088 = {5762f2a7-4658-4c7a-a4ac-bdabfe154e0d} 0x758a3088 = {5762f2a7-4658-4c7a-a4ac-bdabfe154e0d} 5 LPVOID* ppv 0x0020e1c0 = 0x00000001 0x0020e1c0 = 0x00000000 函数返回值: HRESULT Return -2147221008
空明流光的主页 空明流光 | 初学一级 | 园豆:106
提问于:2013-10-17 15:41
< >
分享
最佳答案
0

打开注册表编辑器,查找 “1f486a52-3cb1-48fd-8f50-b8dc300d9f9d” 字符串就行了。

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2013-10-17 16:11

可以找到,但哪个是接口的名字呢,如何对应呢?

空明流光 | 园豆:106 (初学一级) | 2013-10-17 16:28

@沧海一杰: 你是想这样写代码吗?

switch(riid)

{

    case "5762f2a7-4658-4c7a-a4ac-bdabfe154e0d": IShellFolder * p = *ppv;
}

Launcher | 园豆:45045 (高人七级) | 2013-10-18 09:22

@Launcher: 这是 hook api得到的代码,我要知道现在他在创建的是不是我要拦截的接口

空明流光 | 园豆:106 (初学一级) | 2013-10-18 11:09

@沧海一杰: 我要拦截的是ishellfolder接口,拦截enumobject方法来在枚举文件是隐藏一些文件,win7隐藏文件在三环好像只有这个办法

空明流光 | 园豆:106 (初学一级) | 2013-10-18 11:13

@沧海一杰: 简单的办法,你等 CoCreateInstance 执行成功后,通过在 *ppv 上调用 QueryInterface 得到 IUnknown 接口后再调用 QueryInterface(__uuidof(IShellFolder)),如果成功,就表示 *ppv 是 IShellFolder* 类型。

 

或者你直接在 __uuidof(IShellFolder) 和 riid 比较也行。

Launcher | 园豆:45045 (高人七级) | 2013-10-18 11:15

@Launcher: 好,我试试

空明流光 | 园豆:106 (初学一级) | 2013-10-18 11:19
其他回答(2)
0

用C#按GUID获取类型不就知道了。。。找死人的要

56180825 | 园豆:1756 (小虾三级) | 2013-10-17 20:30
0

这个问题过几天再研究,先结了

空明流光 | 园豆:106 (初学一级) | 2013-10-22 17:24

备注下.net4.0创建webbrowser代码:

    private void TransitionFromPassiveToLoaded()
    {
        if (this.ActiveXState == WebBrowserHelper.AXState.Passive)
        {
            this.activeXInstance = UnsafeNativeMethods.CoCreateInstance(ref this.clsid, null, 1, ref NativeMethods.ActiveX.IID_IUnknown);
            this.ActiveXState = WebBrowserHelper.AXState.Loaded;
            this.AttachInterfacesInternal();
        }
    }

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2013-11-20 09:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册