已经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
打开注册表编辑器,查找 “1f486a52-3cb1-48fd-8f50-b8dc300d9f9d” 字符串就行了。
可以找到,但哪个是接口的名字呢,如何对应呢?
@沧海一杰: 你是想这样写代码吗?
switch(riid)
{
case "5762f2a7-4658-4c7a-a4ac-bdabfe154e0d": IShellFolder * p = *ppv;
}
@Launcher: 这是 hook api得到的代码,我要知道现在他在创建的是不是我要拦截的接口
@沧海一杰: 我要拦截的是ishellfolder接口,拦截enumobject方法来在枚举文件是隐藏一些文件,win7隐藏文件在三环好像只有这个办法
@沧海一杰: 简单的办法,你等 CoCreateInstance 执行成功后,通过在 *ppv 上调用 QueryInterface 得到 IUnknown 接口后再调用 QueryInterface(__uuidof(IShellFolder)),如果成功,就表示 *ppv 是 IShellFolder* 类型。
或者你直接在 __uuidof(IShellFolder) 和 riid 比较也行。
@Launcher: 好,我试试
用C#按GUID获取类型不就知道了。。。找死人的要
这个问题过几天再研究,先结了
备注下.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();
}
}