如何能让我的dll在被调用的进程中卸载掉,而不关闭进程(调用dll的程序不是我写的,但dll是我写的,目前我的程序可以和我这个dll通讯,但不知道怎样让dll卸载)

解决方案 »

  1.   

    FreeLibrary  ?  我在我的dll中使用FreeLibrary ,释放自己吗?我试过了,一用FreeLibrary,进程也关闭了。我并不想关闭进程啊。
      

  2.   

    采用注入dll的技术,在需要释放dll时在主程序中插入另一个dll,在主程序内部执行FreeLibrary,然后退出注入的dll。
      

  3.   

    SolidEst(Solid)   你的办法很好,谢谢,但这个新注入的dll又怎么卸载呢,
    其实我的dll就是注入进去的。
      

  4.   

    注入dll时采用如下步骤:
    1.VirtualAllocEx分配远程进程的地址空间中的内容
    2.WriteProcessMemory将DLL的路径名复制到1中分配的内存
    3.使用GetProcessMemmory获取LoadLibraryA/W的实地址(Kernel32.dll中)
    4.CreateRemoteThread函数在远程进程中创建线程,它调用正确的Loadlibrary函数,为它传递第一步分配的内存地址
    释放时采用
    5.VirtualFreeEx释放1分配的内存
    6.使用GetProcAddress函数,获得FreeLibrary函数的实地址
    7.使用CreateRemoteThread在远程进程中创建一个线程,它调用FreeLibrary函数,传递远程注入的DLL的HINSTANCE
      

  5.   

    你的意思是DLL自己卸载自己啊?这个就不知道了。应该是由主进程调用FreeLibrary才对。
      

  6.   

    第二次注入应采用远程代码FreeLibrary(),而不是多余的dll文件,