求助, 32位程序如何让64位的进程也加载我自己编写的64dll
在windows7 x64环境中, 我的需求是通过全局钩子,让所有的进程加载我的dll。 但是发现32位程序只能使32位的进程加载我的32dll。 要编写成64位程序和dll,才对64位的进程有效。 问题是我不想因为这个实现1个功能而编写2个一样的程序和dll , 只不过就是32,64位的区别。 有什么办法,能通过我自己编写的32位程序,让64位进程也加载我的64dll。 比如说360安全卫士吧, 我看了下它所有的进程都是有*32的, 但是利用procexp查看,发现64位的程序也会加载他编写的64dll。请问这个功能大致要怎么实现呢? 注册表里有个键值那个不算吧, 我看了都没发现有360的dll。
------解决方案--------------------
在博客园上看到一篇文章:
64位进程调用32位dll的解决方法
http://www.cnblogs.com/mazhenyu/archive/2007/06/28/798710.html
验证:
工作流程:
1.创建一个进程外COM服务器(EXE)。
2.将32位dll的接口函数封装为COM服务器的相关接口。
3.注册COM服务器*.exe /regserver (注销 *.exe /unregserver)。
4.64位进程调用32位COM服务器接口,成功。从而曲线实现了64位进程调用32位dll。
具体步骤:
我首先创建了一个简单的dll工程,只输出一个函数int c = add(int a,int b); 生成lib和dll
然后创建一个进程外COM(EXE类型),内部链接dll,添加方法Method: Add(long *c)
{ *c = add(1,2);}编译生成。
然后注册COM,*.exe /regserver
最创建一个64位WIN32工程验证64位环境下方法调用是否正确,经验证正确!!!
这方法,应该不是楼主想要的,但是你说的这种情况,应该不可能做到。
------解决方案--------------------360安全卫士吧, 我看了下它所有的进程都是有*32的, 但是利用procexp查看,发现64位的程序也会加载他编写的64dll。
那别人怎么实现的。。。
------解决方案--------------------创建你的64位Hook 的所有的东东。
然后,在你的32 位程序中使用 rundll32.exe,运行64位的DLL去Hook 64位的程序。
------解决方案--------------------
好的,能给些相关的资料不。 至少查看msdn在哪一块