2011-12-24 39 views

回答

6

~只能在用戶模式下工作。要列出系統上的所有線程,我記得它是!process 0 1(已經有一段時間了)。

「具體而言,我期待找到導致事件的線程的ID,即斷點。」

這種說法在內核模式下沒有多大意義。你能更詳細地描述你的場景嗎?

編輯:啊,現在我明白了。你想知道你現在正在使用哪個線程。給!thread一個去。

+0

星爺,我有一個的NtLoadDriver斷點,只是想知道:幸運的是,如果你使用的是C++的評估@ $線的類型爲一個指向ETHREAD引發異常的線程的ID。 – user963228 2011-12-24 08:07:41

+0

你是如何設置斷點的?在內核調試器中,您無法默認設置或攔截用戶模式代碼中的斷點。 – 2011-12-24 08:13:35

+0

我的意思是NtLoadDriver在ntoskrnl中,所以這個線程已經在supervisor模式(環0)中執行了。 使用調試符號,我只是鍵入 kd> bp NtLoadDriver – user963228 2011-12-24 08:15:37

4

您可以隨時使用@ $線的僞寄存器來引用當前線程對象:

0: kd> r @$thread 
$thread=fffff80002c02cc0 

如果你想線程的ID,你需要挖掘出來的ETHREAD的。

0: kd> ?? @$thread->Cid 
struct _CLIENT_ID 
    +0x000 UniqueProcess : 0x00000000`00001408 Void 
    +0x008 UniqueThread  : 0x00000000`0000144c Void 

斯科特

相關問題