hnwgzc
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2010-01-27
  • 粉丝0
  • 关注0
  • 积分406分
  • 威望68点
  • 贡献值0点
  • 好评度61点
  • 原创分0分
  • 专家分0分
阅读:1934回复:5

如何在驱动中挂起一个刚产生的新线程

楼主#
更多 发布于:2005-07-15 09:04
  我的思路是:通过PsSetCreateThreadNotifyRoutine获取新线程的ID,然后通过APC来设置一个kernel APC让该线程等待某个事件。(reactos中使用的就是这个思路)

问题:目前的问题在于无法由ThreadID获取对应的PKTHREAD;使用PsLookupThreadByThreadId返回的错误是0XC000000D,使用ZwOpenThread返回的错误也是0XC000000D;但是此时softice是能获取PKTHREAD的,请问在这种情况下我该怎么获取PKTHREAD?或者说softice是如何获取PKTHREAD的?或者是否有别的新的思路?
谢谢!
这是一个流氓和无赖的社会!
hnwgzc
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2010-01-27
  • 粉丝0
  • 关注0
  • 积分406分
  • 威望68点
  • 贡献值0点
  • 好评度61点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-19 09:50
大牛们,给点答复吧!
这是一个流氓和无赖的社会!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-07-19 10:23
看windows源代码,这个时候对新创建的thread因为还没有调用ObInsertObject,所以通过PsLookupThreadByThreadId还查不到。这个时候可以获得EPROCESS,可以从ThreadListHead找到ETHREAD,就是对于不用的版本要硬编码
hnwgzc
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2010-01-27
  • 粉丝0
  • 关注0
  • 积分406分
  • 威望68点
  • 贡献值0点
  • 好评度61点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-21 17:58
谢谢zhaock大牛!
可以按照zhaock大牛所说获取PKTHREAD,
试验也能挂起Thread/Process。
不过硬编码太多,不能实用!
这是一个流氓和无赖的社会!
hnwgzc
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2010-01-27
  • 粉丝0
  • 关注0
  • 积分406分
  • 威望68点
  • 贡献值0点
  • 好评度61点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-21 17:58
不知道是否有实用的方法?
这是一个流氓和无赖的社会!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-07-21 19:18
你不一定非要在线程回调函数里做,你可以hook NtCreateThread,返回的时候,根据ThreadHandle,可以得到PKTHREAD,你可以试试.
游客

返回顶部