已知一个线程的ID,请问如何把该线程暂停呢?谢谢。。。。。。。(100分)

  • 主题发起人 主题发起人 yqlqq
  • 开始时间 开始时间
Y

yqlqq

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用NtOpenThread来得到线程的Handle,然后再SuspendThread,但得到的Handle永远都是空的,实在没办法了,请高手们指点指点,无限感谢。。。。。。。
 
你既然知道一个线程了,为什么还要用NtOpenThread来获得Handle呢?而不直接用这个线程的Handle属性呢?
 
直接操作线程ID就可以吧。。。。<br>DWORD r = SuspendThread(H); //注意H不能是GetCurrentThread()的返回值<br>ResumeThread(H);<br>if(r &gt; 0 and r &lt;&gt; (DWORD)-1) then<br>&nbsp; 表示线程输出挂起状态
 
To:cqwty<br>  问题是我只知道线程的ID,并不知道线程的Handle啊。。。<br><br>To:lngdtommy<br>  SuspendThread(H); H不是应该用线程的Handle吗,但我并不知道线程的Handle啊。。。<br><br>问题还没解决,再请高手指点,谢谢。。。。。
 
用API:<br>OpenThread
 
我试过用OpenThread来求Handle的,但每次执行到这个API都会报错,所以才改用NtOpenThread的。<br><br>谁有成功调用OpenThread的例子共享一下啊,谢谢。。。。。。。
 
你OpenThread是权限不够.才返回失败.<br>先提升到调试权限.<br>另外一些内核进程的线程你在Ring3层是根本没法Open成功.
 
我就是用NtOpenThread来做的,没问题啊,传个小例子给你吧。
 
Windows没有提供通过ThreadID得到Thread Handle的任何函数,只能通过Hook Massage 的<br>方法,hook函数内部得到Thread Handle,但是因为涉及商业秘密,我只能说到此!
 
接受答案了.
 
后退
顶部