例如程序標題是"test345",如何可以令他sleep?
希望能詳細一點

解决方案 »

  1.   

    debug api
    windows系统下能真正让别的进程停止只能用debug api,通过响应debug事件,可以做到中断目标进程的所有线程。看一下windows核心编程。
      

  2.   

    請問有沒有一些文章或代碼可以用來參考?
    debug好像很高技術,我還未接觸過
      

  3.   

    你可以写个DLL远程注入到应用程序里,然后得到主线程的HANDLE, 调用SuspendThread试试!
      

  4.   

    debuger其实就是先注册想响应的事件,然后等待注册的回调函数被调用。当回调函数被调用时,windows保证被debug的进程的所有线程都是suspend的。
    如果你是自己枚举该进程所有线程然后用循环suspend,因为枚举函数只是当时的一个快照,所以有可能在循环运行这段时间目标进程会产生新的线程。从而不能做到停止进程。
    windows提供的方法就是debug api,网上找找代码吧,应该不是很复杂,windows核心编程这本书里好像也有。记不清楚了。基本步骤应该就是attatch->debug。
      

  5.   

    线程注入,同 ymbymb(毛病大哥)的方法。网上很多例子的,就查线程注入。
      

  6.   

    哦,说道远线程注入,也许可以吧这里有篇文章楼主可以参考一下http://www.csdn.net/develop/read_article.asp?id=15645不过远线程注入实在复杂,楼主没必要这么大动干戈吧
      

  7.   

    试了试,好像没法得到主线程的HANDLE,不好意思!
      

  8.   

    呵呵,写个驱动,或者安装一个callgate,直接把这个线程的PEB从就绪队列里面拿出来,这样os就调度不到它了。隐藏进程我也是这么干的:)
      

  9.   

    只要让它得不到Windows分配的时间片就可以了。等过了合适的时间你再把PEB插入到系统的就绪队列里面。
      

  10.   

    ymbymb(毛病大哥) 
    这位兄弟的方法可以试试
      

  11.   

    引用:“呵呵,写个驱动,或者安装一个callgate,直接把这个线程的PEB从就绪队列里面拿出来,这样os就调度不到它了。隐藏进程我也是这么干的:)”-------------------------------------------------
    一个是修改PsActiveProcess你那要修改KiWaitInListHead和KiWaitOutListHead而且你所说的PEB也不正确吧,应该是TEB
      

  12.   

    使用SuspendThread挂起另一个应用程序的主线程
      

  13.   

    只不过2000下有现成的OpenThread
    98下就要另想办法了
      

  14.   

    仅适用于2000/NT/XP下的方法:先用FindWindo,通过标题得到窗口句柄
    再用GetWindowThreadProcessId得到该窗口的处理线程的ThreadID
    然后用OpenThread打开线程句柄
    最后用SuspendThread挂起线程,ResumeThread可以继续运行
      

  15.   

    呵呵,习惯了,确实是TEB,操作系统课里面老叫PCB、PCB的,改不过来口:)