??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
在DLL_PROCESS_ATTACH的时候创Z一个线E,q个U程中创Z一个隐藏的H口Qƈ利用MCI实现播放音乐Q具体就不脓Z。然后在DLL_PROCESS_DETACH中停止和关闭讑֤?/p>
但是在应用程序中Q发现注入时无异常,在需要撤销DLL映射时出C问题Q程序出Cd@环,在等待远E线E执行FreeLibaray完毕时不q回了?/p>
注意上面代码中DLL_PROCESS_DETACH的代码,SendMessage用来关闭H口Q窗口会在WM_DESTROY通知下调用PostQuitMessage(0)使得U程的消息@环退出,从而线E退出。但是WaitForSingleObject函数无法q回?/p>
后来发现q里存在d@环,因ؓ执行DllMain的线E是序列化的Q必ȝ待一个线E执行完毕之后另一个线E才能执行。在SendMessage后,D创徏的线E即退出,q时该线E会调用DllMainQƈ以DLL_THREAD_DETACH作ؓ通知。可是调用SendMessage的线E调用DllMain时却q在{待卛_退出的U程l束QDllMainq没有返回,因此存在了死循环?/p>
因此Q在DllMain中不适合调用WaitForSingleObject{函数来{待U程完毕?/p>