点击:0
CoomyMorris (
来者)
2004-02-24 20:31:34 在 / 提问
我在
Windows98下想实现对进程的挂起及继续,由于
Windows98下除了Win32
调试API以外我不知道还有什么方法可以得到任意线程的句柄,所以我就用Win32
调试API。我遇到的
问题如下:
我写了一个很小的对话框程序,当按下对话框上的一个按钮后CreateThread()设为t1,t1负责循环检测系统中当前运行的进程,如有新进程生成则CreateThread()设为t2,t2负责对该进程进行
调试,DebugActiveProcess()然后是一个循环执行WaitForDebugEvent()和ContinueDebugEvent()。并且在ContinueDebugEvent()时还对EXCEPTION_BREAKPOINT异常进行的DBG_CONTINUE的恢复处理。编译通过,执行时
问题出现了。有的时候程序运行正常,DebugActiveProcess()挂起了新启动的进程,WaitForDebugEvent()和ContinueDebugEvent()循环恢复了被挂起进程的执行。有的时候新启动的进程被挂起,但却恢复不了。WaitForDebugEvent()执行失败没有收到
调试事件,这是不应该的。当错误发生时,所有被挂起的进程都只有2个线程。我的分析是,2个线程中有一个是被挂起进程的主线程,另一个是系统给被挂起进程生成的,当进程被挂起时该进程生成一个线程向
调试线程发送
调试事件。但为何我生成的
调试线程t2没有收到
调试事件从而执行WaitForDebugEvent()失败。而且有时执行时成功的。这是为何?
> >更多精彩技术文章>http://www.66of.com