代码之家  ›  专栏  ›  技术社区  ›  anand

无法在注册表中找到ClassID和接口ID

  •  0
  • anand  · 技术社区  · 16 年前

    我正在调试windbg中的一些exe。现在它调用第三方com dll,该dll公开了DLLGetClassObject函数。

    DLLGetClassObject签名为

    HRESULT __stdcall DllGetClassObject(
      __in   REFCLSID rclsid,
      __in   REFIID riid,
      __out  LPVOID *ppv
    );
    

    通过查看堆栈跟踪和参数,我可以使用命令找到类id和接口id

    dt GUID[地址]

    当我试图在注册表中搜索这些guid时,我找不到任何东西。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Kim Gräsman    16 年前

    DllGetClassObject 由任何COM运行时函数调用( CoCreateInstance CoGetClassObject )?

    如果是这样,您的CLSID应该在HKEY_CLASSES_ROOT/CLSID下找到。接口不一定要注册。

        2
  •  1
  •   Kim Gräsman    16 年前

    我有另一个不相关的理论——你们有第三方DLL的符号吗?

    如果选择DllGetClassObject作为模块的“基本导出”,并且.exe调用模块中托管的COM方法,则调用堆栈将显示如下内容:

      DllGetClassObject + 0x112313
      UseThirdPartyCOMThing + 0x20
    

    因此,这可能是一个转移视线的问题——您可能只是看到在某个偏移量处对DLL的调用,而该偏移量在可用符号中不匹配,并且调试器使用其可用的任何信息来显示它。

    推荐文章