1

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

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

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

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

4

1 回答 1

0

由于MSDN

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

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

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

于 2013-10-19T22:03:07.340 回答