将线程标识为“远程线程”

时间:2013-01-26 16:57:09

标签: c++ windows multithreading

我正在研究一个过程来分析另一个过程的作用 它检查CPU,内存使用情况,线程创建和死亡等。 不幸的是,我的计算机上安装了一个防病毒软件,它在我检查过程中创建了一个远程线程。这个远程线程实际上不是进程的一部分,所以我想在检查进程时忽略这个线程。

是否有一种方法(在C ++中)允许我们将线程识别为“远程线程”?

2 个答案:

答案 0 :(得分:6)

在内部,使用CreateThread创建的线程与使用CreateRemoteThread创建的线程之间没有区别。 (从某种程度上说,CreateThread基本上会调用CreateRemoteThread并将GetCurrentProcess()作为目标进程传递。)如果要区分线程,则必须使用启发式方法。

答案 1 :(得分:5)

如果您愿意进入内核模式PsSetCreateThreadNotifyRoutine可能会对您感兴趣。根据{{​​3}},在创建或终止线程'的过程'的上下文中调用它。我也看到了这个建议Uninformed

我接受了测试,它运行正常。 你应该注意到,你会看到许多误报,因为Windows(不出所料)会自己注射一些东西。< EDIT> 实际上这是因为在创建第一个线程时创建进程,它将在父进程的上下文中完成。简单地消除第一个线程创建,这给出了一个非常好的指示。 < /编辑>

主要的缺点是(除了必须编写驱动程序之外)您需要看到创建发生,因此您的流程需要先启动。

或者,如上所述,涉及堆栈跟踪,加载模块和所有好东西的启发式方法发挥作用。