2013-10-19 65 views
1

我一直在從Windows XP開始,開發Windows版本的驅動程序。爲此,我使用例程PsSetCreateThreadNotifyRoutine。在註冊的回調中,我試圖訪問線程的上下文,我沒有得到。我發現了這樣的信息,即在調用回調函數時,線程不會仍然處於將要使用的上下文中。監視線程創建

我不知道是否有像kewaitforsingleobject這樣的函數,當那些線程獲取上下文時,這些函數會發出信號?

我試圖爲每個出現的線程創建一個新的線程,讓他們等待,但不認爲這是最好的解決方案。

在這種情況下,等待線程接收其上下文的最佳方法是什麼?

回答

0

由於MSDN

驅動程序的線程通知在IRQL = PASSIVE_LEVEL日常運行。當 線程被創建時,線程通知例程在創建新線程的線程的上下文中運行 。當線程被刪除時, 線程退出時,線程通知例程將在此線程的上下文中運行。

因此您可以在新線程創建時訪問父線程的上下文。 我不確定,但似乎您也可以訪問刪除線程的刪除線程。 (或可能是父母再次)

所以,你可以使用一個列表來存儲線程ID和工作線程來檢查每個TID。 不要忘記互斥。您可以使用MUTEX或SPINLOCK(不知道它們在WDK中的實際名稱)。