!Поток

Расширение !thread отображает сводную информацию о потоке в целевой системе, включая блок ETHREAD. Эта команда может использоваться только во время отладки в режиме ядра.

Эта команда расширения не совпадает с командой .thread (Set Register Context).

Синтаксис

!thread [-p] [-t] [Address [Flags]]

Параметры

-p
Отображает сводные сведения о процессе, который владеет потоком.

-t
Если этот параметр включен, адрес — это идентификатор потока, а не адрес потока.

Адрес
Указывает шестнадцатеричный адрес потока на целевом компьютере. Если адрес равен -1 или опущен, он указывает текущий поток.

Flags
Указывает уровень детализации для отображения. Флаги могут быть любым сочетанием следующих битов. Если флаги равно 0, отображается только минимальное количество сведений. Значение по умолчанию — 0x6:

Бит 1 (0x2)
Отображает состояния ожидания потока.

Бит 2 (0x4)
Если этот бит используется без бита 1 (0x2), он не действует. Если этот бит используется с битом 1, поток отображается с трассировкой стека.

Бит 3 (0x8)
Добавляет возвращаемый адрес, указатель стека и (в системах Itanium) значение регистра bsp в сведения, отображаемые для каждой функции, и подавляет отображение аргументов функции.

Бит 4 (0x10)
Задает контекст процесса, равный процессу, которому принадлежит указанный поток в течение этой команды. Это приводит к более точному отображению стека потоков.

DLL-библиотеки

Kdexts.dll

Дополнительная информация

Сведения о потоках в режиме ядра см. в разделе "Изменение контекстов " и "Управление процессами и потоками". Дополнительные сведения об анализе процессов и потоков см. в статье Microsoft Windows Internals, Марк Руссинович, Алекс Ионеску и Дэвид Соломон.

Замечания

Ниже приведен пример использования Windows 10:

0: kd> !thread 0xffffcb088f0a4480            
THREAD ffffcb088f0a4480  Cid 0e34.3814  Teb: 0000001a27ca6000 Win32Thread: 0000000000000000 RUNNING on processor 0
Not impersonating
DeviceMap                 ffffb80842016c20
Owning Process            ffffcb08905397c0       Image:         MsMpEng.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount      182835891      Ticks: 0
Context Switch Count      5989           IdealProcessor: 3             
UserTime                  00:00:01.046
KernelTime                00:00:00.296
Win32 Start Address 0x00007ffb3b2fd1b0
Stack Init ffff95818476add0 Current ffff958184769d30
Base ffff95818476b000 Limit ffff958184765000 Call 0000000000000000
Priority 8 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
Child-SP          RetAddr           : Args to Child                                                           : Call Site
fffff802`59858c68 fffff801`b56d24aa : ffffcb08`8fd68010 00000000`00000000 fffff802`58259600 00000000`00000008 : nt!DbgBreakPointWithStatus [d:\rs2\minkernel\ntos\rtl\amd64\debugstb.asm @ 130] 
fffff802`59858c70 ffffcb08`8fd68010 : 00000000`00000000 fffff802`58259600 00000000`00000008 ffffcb08`8f0a4400 : 0xfffff801`b56d24aa
fffff802`59858c78 00000000`00000000 : fffff802`58259600 00000000`00000008 ffffcb08`8f0a4400 00000000`00000019 : 0xffffcb08`8fd68010

Используйте такие команды, как !process , чтобы найти адрес или идентификатор потока интересующего вас потока.

Полезные сведения в отображении !thread описаны в следующей таблице.

Параметр Значение

Адрес потока

Шестнадцатеричное число после слова THREAD является адресом блока ETHREAD. В предыдущем примере адрес потока 0xffffcb088f0a4480.

Идентификатор потока

Два шестнадцатеричных числа после слова Cid — это идентификатор процесса и идентификатор потока: идентификатор процесса ID.thread. В предыдущем примере идентификатор процесса — 0x0e34, а идентификатор потока — 0x3814.

Блок среды потока (TEB)

Шестнадцатеричное число после слова Teb — адрес блока среды потока (TEB).

Win32Thread

Шестнадцатеричное число после слова Win32Thread — это адрес Win32Thread.

Состояние потока

Состояние потока отображается в конце строки, начинающейся с слова RUNNING.

Процесс владения

Шестнадцатеричное число после слова "Процесс владения " — это адрес EPROCESS для процесса, который владеет этим потоком.

Начальный адрес

Шестнадцатеричное число после слов "Начальный адрес " — это адрес начала потока. Это может отображаться в символьной форме.

Функция пользовательского потока

Шестнадцатеричное число после слов Win32 Start Address — это адрес функции потока пользователя.

Приоритет

Сведения о приоритете для потока соответствуют слову Priority.

Трассировка стека

Трассировка стека для потока отображается в конце этого дисплея.