日期:2014-05-17  浏览次数:20896 次

求助, 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位的程序。
------解决方案--------------------
引用:
创建你的64位Hook 的所有的东东。
然后,在你的32 位程序中使用 rundll32.exe,运行64位的DLL去Hook 64位的程序。


好的,能给些相关的资料不。  至少查看msdn在哪一块