监视线程创建

时间:2013-10-19 20:05:00

标签: c# c++ visual-studio-2010 visual-studio visual-c++

我一直在为从Windows XP开始的Windows版本开发驱动程序。为此,我正在使用例程PsSetCreateThreadNotifyRoutine。在注册的回调中,我正在尝试访问线程的上下文而我没有得到。我发现了一个信息,当调用回调函数时,线程仍然不在将要使用的上下文中。

我想知道是否有像kewaitforsingleobject这样的函数会在这些线程获得上下文时发出信号?

我尝试为每个出现的线程创建一个新线程并让它们等待但不认为这是最好的解决方案。

在这种情况下,等待线程接收上下文的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

归因于MSDN

  

驱动程序的线程通知例程在IRQL = PASSIVE_LEVEL运行。什么时候   一个线程被创建,线程通知例程在上下文中运行   创建新线程的线程。当一个线程被删除时,   thread-notify例程在此线程的上下文中运行时   线程退出。

因此,您可以在创建新线程时访问父线程的上下文。 我不确定,但似乎你也可以访问删除线程的上下文删除。 (或者也许是父母)

因此,您可以使用列表存储Thread-ID并使用工作线程来检查每个TID。 不要忘记相互排斥。您可以使用MUTEX或SPINLOCK(在WDK中不知道它们的实际名称)。