Windows IGlobalInterfaceTable::RegisterInterfaceingGlobal返回零cookie

Windows IGlobalInterfaceTable::RegisterInterfaceingGlobal返回零cookie,windows,com,reverse-engineering,com-automation,Windows,Com,Reverse Engineering,Com Automation,我正在尝试重新打包一个由几个库、COM接口和COM自动化服务器组成的专有应用程序 我的精简版不起作用 使用函数调用监视器(RohitLab API监视器),我已经确定 IGlobalInterfaceTable::RegisterInterfaceingGlobal为剥离版本中的cookie返回零值;在正确的完全安装中,它始终返回256 表示“无效cookie的值为0。” 这很有趣,但应用程序忽略了零返回值,而将256(始终?)用于IGlobalInterfaceTable::GetInterf

我正在尝试重新打包一个由几个库、COM接口和COM自动化服务器组成的专有应用程序

我的精简版不起作用

使用函数调用监视器(RohitLab API监视器),我已经确定 IGlobalInterfaceTable::RegisterInterfaceingGlobal为剥离版本中的cookie返回零值;在正确的完全安装中,它始终返回256

表示“无效cookie的值为0。”

这很有趣,但应用程序忽略了零返回值,而将256(始终?)用于IGlobalInterfaceTable::GetInterfaceFromGlobal,并且以后不会工作,因为它试图将为接口返回的空指针连接到其他COM对象

但它并没有崩溃,只是无法按预期工作

问题:
为什么RegisterInterfaceingGlobal会返回零值?包含此接口类型库的dll使用regsvr32注册。顺便说一句,它似乎加载了另一个dll,这也是一个COM库,但其中没有类型库。

嗯,这没有任何意义。0不会神奇地变成256。一个简单的解释是api监视器有缺陷,在调用之前而不是调用之后显示值。继续看,不是这样的。汉斯,我有两台相同的Windows虚拟机。其中一个运行完整安装,API监视器显示调用后的值(始终为256)。我认为一个差劲的开发人员硬编码了256,因为这是他在实验中经常得到的,而且这是唯一一个在GIT中注册的接口,所以它是可重复的,不会引起任何问题。我将尝试反汇编函数调用以确认这一点。此外,在中断的安装中,接口对象指针的调用后值没有更改,它保持为NULL。我很确定这是因为安装中断,而不是监视器中的错误。更新:不是唯一注册的接口,它总是先注册。