!thread

L’extension !thread affiche des informations récapitulatives sur un thread sur le système cible, y compris le bloc ETHREAD. Cette commande ne peut être utilisée que pendant le débogage en mode noyau.

Cette commande d’extension n’est pas la même que la commande .thread (Définir le contexte de registre).

Syntaxe

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

Paramètres

-p
Affiche des informations récapitulatives sur le processus propriétaire du thread.

-t
Lorsque cette option est incluse, Address est l’ID de thread et non l’adresse du thread.

Adresse
Spécifie l’adresse hexadécimale du thread sur l’ordinateur cible. Si Address a une valeur de -1 ou est omise, elle indique le thread actuel.

Indicateurs
Spécifie le niveau de détails à afficher. Flags peut être n’importe quelle combinaison des bits suivants. Si Flags a une valeur de 0, seule une quantité minimale d’informations est affichée. La valeur par défaut est 0x6 :

Bit 1 (0x2)
Affiche les états d’attente du thread.

Bit 2 (0x4)
Si ce bit est utilisé sans Bit 1 (0x2), il n’a aucun effet. Si ce bit est utilisé avec Bit 1, le thread est affiché avec une trace de pile.

Bit 3 (0x8)
Ajoute l’adresse de retour, le pointeur de pile et la valeur de registre bsp (sur les systèmes Itanium) aux informations affichées pour chaque fonction et supprime l’affichage des arguments de fonction.

Bit 4 (0x10)
Définit le contexte de processus égal au processus propriétaire du thread spécifié pendant la durée de cette commande. Cela entraîne un affichage plus précis des piles de threads.

DLL

Kdexts.dll

Informations supplémentaires

Pour plus d’informations sur les threads en mode noyau, consultez Modification des contextes et Contrôle des processus et des threads. Pour plus d’informations sur l’analyse des processus et des threads, veuillez consulter Microsoft Windows Internals (Au cœur de Windows) de Mark Russinovich, Alex Ionescu et David Solomon.

Notes

Voici un exemple avec 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

Utilisez des commandes telles que !process pour localiser l’ID de thread ou l'adresse du thread qui vous intéresse.

Les informations utiles dans l’affichage !thread sont expliquées dans le tableau suivant.

Paramètre Signification

Thread address

Le nombre hexadécimal après le mot THREAD correspond à l’adresse du bloc ETHREAD. Dans l’exemple précédent, l’adresse du thread est 0xffffcb088f0a4480.

ID de thread

Les deux nombres hexadécimaux après le mot Cid correspondent à l’ID de processus et à l’ID de thread : process ID.thread ID. Dans l’exemple précédent, l’ID de processus est 0x0e34 et l’ID de thread est 0x3814.

Thread Environment Block (TEB)

Le nombre hexadécimal après le mot Teb correspond à l’adresse du bloc d’environnement de thread (TEB).

Win32Thread

Le nombre hexadécimal après le mot Win32Thread correspond à l’adresse du Win32Thread.

État du thread

L’état du thread s’affiche à la fin de la ligne qui commence par le mot RUNNING.

Owning Process

Le nombre hexadécimal après les mots Owning Process correspond à l’adresse du EPROCESS pour le processus propriétaire de ce thread.

Adresse de début

Le nombre hexadécimal après les mots Start Address correspond à l’adresse de début du thread. Cela peut prendre la forme de symboles.

User Thread Function

Le nombre hexadécimal après les mots Win32 Start Address correspond à l’adresse de la fonction thread utilisateur.

Priorité

Les informations de priorité pour le thread se trouvent après le mot Priority.

Trace de pile

Une trace de pile pour le thread apparaît à la fin de cet affichage.