2013-10-19 67 views
1

我一直在从Windows XP开始,开发Windows版本的驱动程序。为此,我使用例程PsSetCreateThreadNotifyRoutine。在注册的回调中,我试图访问线程的上下文,我没有得到。我发现了这样的信息,即在调用回调函数时,线程不会仍然处于将要使用的上下文中。监视线程创建

我不知道是否有像kewaitforsingleobject这样的函数,当那些线程获取上下文时,这些函数会发出信号?

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

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

回答

0

由于MSDN

驱动程序的线程通知在IRQL = PASSIVE_LEVEL日常运行。当 线程被创建时,线程通知例程在创建新线程的线程的上下文中运行 。当线程被删除时, 线程退出时,线程通知例程将在此线程的上下文中运行。

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

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