!thread

A extensão !thread mostra informações resumidas sobre um thread no sistema de destino, incluindo o bloco ETHREAD. Esse comando pode ser usado somente durante a depuração no modo kernel.

Esse comando de extensão não é o mesmo que o comando .thread (Definir contexto de registro).

Sintaxe

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

Parâmetros

-p
Exibe informações de resumo do processo que possui o thread.

-t
Quando esta opção é incluída, Address é a ID do thread, não o endereço do thread.

Endereço
Especifica o endereço hexadecimal do thread no computador de destino. Se Address for -1 ou omitido, ele indicará o thread atual.

Sinalizadores
Especifica o nível de detalhes a serem exibidos. Flags podem ser qualquer combinação dos bits a seguir. Se Flags for 0, somente uma quantidade mínima de informações será exibida. O padrão é 0x6:

Bit 1 (0x2)
Exibe os estados de espera do thread.

Bit 2 (0x4)
Se este bit for usado sem o Bit 1 (0x2), ele não terá efeito. Se este bit for usado com o Bit 1, o thread será exibido com um rastreamento de pilha.

Bit 3 (0x8)
Adiciona o endereço de retorno, o ponteiro de pilha e (em sistemas Itanium) o valor de registro bsp às informações exibidas para cada função e suprime a exibição de argumentos de função.

Bit 4 (0x10)
Define o contexto do processo igual ao processo que possui o thread especificado ao longo da duração deste comando. Isso resulta em uma exibição mais precisa das pilhas de threads.

DLL

Kdexts.dll

Informações Adicionais

Para obter informações sobre threads no modo kernel, consulte Como alterar contextos e Como controlar processos e threads. Para obter mais informações sobre como analisar processos e threads, confira Microsoft Windows Internals por Mark Russinovich, Alex Ionescu e David Solomon.

Comentários

Aqui está um exemplo de uso do 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

Use comandos como !process para localizar o endereço ou a ID do thread no qual você tem interesse.

As informações úteis na exibição !thread são explicadas na tabela a seguir.

Parâmetro Significado

Endereço do thread

O número hexadecimal depois da palavra THREAD é o endereço do bloco ETHREAD. No exemplo anterior, o endereço do thread é 0xffffcb088f0a4480 .

ID do Thread

Os dois números hexadecimais após a palavra Cid são o ID do processo e o ID do thread: process ID.thread ID. No exemplo anterior, a ID do processo é 0x0e34 e a ID do thread é 0x3814.

Bloco de ambiente de thread (TEB)

O número hexadecimal depois da palavra Teb é o endereço do bloco de ambiente de thread (TEB).

Win32Thread

O número hexadecimal depois da palavra Win32Thread é o endereço do bloco Win32Thread.

Estado da Thread

O estado do thread é exibido no final da linha que começa com a palavra RUNNING.

Processo proprietário

O número hexadecimal depois das palavras Processo proprietário é o endereço do EPROCESS para o processo que possui esse thread.

Endereço Inicial

O número hexadecimal depois das palavras Endereço inicial é o endereço inicial do thread. Isto pode aparecer de forma simbólica.

Função de thread do usuário

O número hexadecimal depois das palavras Win32 Endereço inicial é o endereço da função de thread do usuário.

Prioridade

As informações de prioridade para o thread seguem a palavra Prioridade.

Rastreamento de pilha

Um rastreamento de pilha para o thread aparece ao fim desta exibição.