Winapi 处理钩子函数

Winapi 处理钩子函数,winapi,dll,com,hook,easyhook,Winapi,Dll,Com,Hook,Easyhook,我试图在C#中使用EasyHook从COM对象(非托管)正确地钩住一个方法 我能够确定COM对象方法的地址,并且可以正确地触发钩子函数。我是这样做的,剩下的代码与教程中的代码非常相似: SendHook = LocalHook.Create(0x12345678, new DMyFunc(MyFunc_Hooked), this); 然而,一旦进入我的钩子,所有参数都会被置乱(它们不等于我最初传递的参数) 此外,我无法返回任何内容(请注意,我还尝试挂接另一个返回short的函数,但该值没有正确

我试图在C#中使用EasyHook从COM对象(非托管)正确地钩住一个方法

我能够确定COM对象方法的地址,并且可以正确地触发钩子函数。我是这样做的,剩下的代码与教程中的代码非常相似:

SendHook = LocalHook.Create(0x12345678, new DMyFunc(MyFunc_Hooked), this);
然而,一旦进入我的钩子,所有参数都会被置乱(它们不等于我最初传递的参数)

此外,我无法返回任何内容(请注意,我还尝试挂接另一个返回short的函数,但该值没有正确返回)

当我打开eXescope时,这是函数签名之一:

function MyFunc(out ParamA:^BSTR; out ParamB:^bool): ^TypeA;
当我在C#中正常使用COM对象时,此函数具有以下签名:


有什么想法吗?提前谢谢

读了Dark Falcon提供的文章后,我设法在5分钟内解决了这个问题。我完全推荐你读它!因此,所有答案都归功于他

您是否考虑调用的第一个参数是指向COM对象的指针?请看这里的一个COM调用的示例:我不知道这一点,但我肯定会考虑这些输入,谢谢!!!!!遗憾的是,这并不像本文所解释的那么容易。这是一篇初学者文章,让所有复杂的东西都放在旁边。而且COM非常好!!复杂。我注意到在COM接口上设置一个钩子会让你直接陷入地狱。我发现我的钩子终于在远程过程调用运行时的包装器对象上设置好了!(Rpcrt4.dll)而不是我想要钩住的函数。导致钩子从未被调用,甚至崩溃!
TypeA MyFunc(ref string ParamA, ref bool ParamB);