阅读:1934回复:5
如何在驱动中挂起一个刚产生的新线程
我的思路是:通过PsSetCreateThreadNotifyRoutine获取新线程的ID,然后通过APC来设置一个kernel APC让该线程等待某个事件。(reactos中使用的就是这个思路)
问题:目前的问题在于无法由ThreadID获取对应的PKTHREAD;使用PsLookupThreadByThreadId返回的错误是0XC000000D,使用ZwOpenThread返回的错误也是0XC000000D;但是此时softice是能获取PKTHREAD的,请问在这种情况下我该怎么获取PKTHREAD?或者说softice是如何获取PKTHREAD的?或者是否有别的新的思路? 谢谢! |
|
|
沙发#
发布于:2005-07-19 09:50
大牛们,给点答复吧!
|
|
|
板凳#
发布于:2005-07-19 10:23
看windows源代码,这个时候对新创建的thread因为还没有调用ObInsertObject,所以通过PsLookupThreadByThreadId还查不到。这个时候可以获得EPROCESS,可以从ThreadListHead找到ETHREAD,就是对于不用的版本要硬编码
|
|
地板#
发布于:2005-07-21 17:58
谢谢zhaock大牛!
可以按照zhaock大牛所说获取PKTHREAD, 试验也能挂起Thread/Process。 不过硬编码太多,不能实用! |
|
|
地下室#
发布于:2005-07-21 17:58
不知道是否有实用的方法?
|
|
|
5楼#
发布于:2005-07-21 19:18
你不一定非要在线程回调函数里做,你可以hook NtCreateThread,返回的时候,根据ThreadHandle,可以得到PKTHREAD,你可以试试.
|
|