有一阵子没 写博客,正好这几天 写了个 内核级强制结束进程 的小例子。写这个例子之前都没去查什么资料,主要是想试试自己能不能写出来吧。写完后才发现 看雪论坛 曾经发表过一篇很相似的文章,实现的细节可能有点不一样,不过原理基本是相同的了。
都是通过 这个 PspTerminateThreadByPointer 函数,我是通过查 ReactOs 来理解的 NtTeriminateProcess 的内部实现过程,
然后 通过 在 SI 里面查找引用,找到的一个 导出函数中调用了 PspTerminateThreadByPointer . 这个函数就是 PsTerminateSystemThread,然后通过 windbg 确认,发现 在Win7 和Xp 下 这个函数 均调用了 PspTerminateThreadByPointer,之后 查到调用的地方,具体的可以去windbg里面看一下,这个函数里面很短,具体我没看,因为这里我只需要用到这个 PspTerminateThreadByPointer 函数。
PspTerminateThreadByPointer() 这个函数的内部我只简单的看了一下,通过向线程插入APC让线程自己结束的办法。
在Win7 和 XP 的32位下这个函数的 参数又一点点 区别,可以看到 在 Win7 下 他有 3个 参数 ,一个是指向线程对象的指针,一个是退出码,还有一个 始终为 1 的参数,XP 下没有 第三个, (当然 由于我并没有完成 Win7 下的代码,这里的分析可能有问题),需要说明的一点是以下代码仅仅兼容 XP 32位版本。
typedef
NTSTA