首页 文章

如何在注入的DLL中正确终止工作线程?

提问于
浏览
7

我正在向某个进程注入一个DLL,该DLL有一个正在运行消息循环的工作线程 .

我想正确地退出线程,即发布一个退出消息(PostThreadMessage)并等待它(WaitForSingleObject) .

我在哪里可以等待这个线程关闭?我无法在DLL_PROCESS_DETACH上执行此操作,因为此时所有线程都已关闭或终止,我不知道该进程何时即将关闭 .

我唯一的想法是,有没有办法拦截主线程消息循环并寻找WM_CLOSE \ DESTROY消息?

我很想听到任何其他想法\解决方案 .

编辑:
Tried to hook the main thread using SetWindowsHookEx with WH_CALLWNDPROC but it didn't worked quite well, I managed to hook and receive the thread's messages. However, I didn't received WM_QUIT message only WM_DESTROY and WM_NCDESTROY and they are all were associated with windows.

谢谢,
奥马尔

2 回答

  • 4

    如果你需要在"About-To-Close"上执行某些操作,你需要使用SetWindowsHookEx与WH_CALLWNDPROC挂钩主线程并查找WM_CLOSE并采取操作/信号线程关闭 .

  • 3

    该过程不知道线程是否存在,它不关心它是否退出 . 实际上,如果程序是用C编写的,它会终止它,当它的main()方法退出时,它的运行时库调用TerminateProcess . Harikiri风格 .

    如果你在外部关心线程,比如在你编写的监视线程的程序中,那么你需要在退出时留下一个痕迹 . 通过使用您使用的任何进程互操作机制将其传递给您的程序,如命名管道 . 或者通过设置命名事件 . 确保您处理harikiri场景,您还需要检查进程句柄是否已发出信号以指示它已终止 .

相关问题