如何卸载其他进程加载的A.dll?
例如,A进程加载了A.dll,我如何在A进程运行的情况下将A.dll卸载掉? 问题点数:20、回复次数:6Top
1 楼lovenoend(有容乃大)回复于 2004-05-02 20:23:47 得分 0
用远线程注入原理,
不过卸载掉A.dll后,若进程A又调用A.dll相关的,估计又载入A.dllTop
2 楼progray(千重劫)回复于 2004-05-02 22:12:07 得分 0
谢谢lovenoend(有容乃大) ,是否能详细的讲解一下,最好有代码示范,我不太清楚如何利用远程线程。A再次调用A.dll的情况可以不考虑,我主要想在卸载掉A.dll后就删除了A.dll。Top
3 楼halk(不当老大已经很久了)回复于 2004-05-02 23:23:44 得分 0
老兄,如果你的目的仅仅是想删dll文件,何必劳师动众去写什么程序,把那个进程关掉然后删dll不就是了Top
4 楼progray(千重劫)回复于 2004-05-03 21:53:45 得分 0
to halk(夜风) ,大哥,你想过没有,要是这么简单我没事发帖子问什么啊。
好多dll我一时确定不了是哪个进程在使用,而且即使确定了,由于该进程是服务或其他原因(如它就是explorer.exe结束了也没用,我迟早还是要运行它的)结束不掉,再一种情况是,即使进程结束了,可dll依然没有从内存中退出,依然无法删除。这就是我发贴的原因。Top
5 楼halk(不当老大已经很久了)回复于 2004-05-04 00:25:36 得分 10
明白了,不过我没试过,只能从原理上提些建议,讨论一下。
再一种情况是,即使进程结束了,可dll依然没有从内存中退出,依然无法删除。这就是我发贴的原因。
------------------
每当DLL加载到一个进程的时候,都会有相应的引用值,当这个值减到0的时候系统就把它从此进程中卸载了,进程结束的时候也一样会卸载它们;但是如果同时还有其它进程在引用这个DLL,那么仍然不能删掉,只有当所有的进程都把它卸载的时候,内存影像才会关闭,文件才能删掉。所以,删不掉很可能是还有其他进程在使用它。
好多dll我一时确定不了是哪个进程在使用
------------------
这该怎么办,一个一个的找?看看有没有别人给出更好的办法
而且即使确定了,由于该进程是服务或其他原因(如它就是explorer.exe结束了也没用,我迟早还是要运行它的)结束不掉
------------------
没别的办法,不能把服务都停掉吧?当然也可以试试,看看哪些是可以停掉而不至于down机的(从服务列表中停)。实在不行,就只能启动到dos去删了;如果是NTFS的分区DOS还看不见,不知道启动到win2k的诊断控制台能否删掉。
Top
6 楼fenforever(其实,我只是一个马甲。)回复于 2004-05-04 08:38:38 得分 10
同意一楼,用远程线程调用GetModuleHandle获得a.dll的模块句柄,然后调用FreeLibrary卸载。Top




