!thread
La extensión !thread muestra información de resumen sobre un subproceso en el sistema de destino, incluido el bloqueo ETHREAD. Este comando solo se puede usar durante la depuración en modo kernel.
Este comando de extensión no es el mismo que el comando .thread (Establecer contexto de registro).
Sintaxis
!thread [-p] [-t] [Address [Flags]]
Parámetros
-p
Muestra información resumida sobre el proceso propietario del subproceso.
-t
Cuando se incluye esta opción, Address es el identificador del subproceso, no la dirección del subproceso.
Dirección
Especifica la dirección hexadecimal del subproceso en el equipo de destino. Si Address es -1 o se omite, indica el subproceso actual.
Banderas
Especifica el nivel de detalle que se muestra. Flags puede ser cualquier combinación de los siguientes bits. Si Flags es igual a 0, solo se muestra una cantidad mínima de información. El valor predeterminado es 0x6:
Bit 1 (0x2)
Muestra los estados de espera del subproceso.
Bit 2 (0x4)
Si este bit se usa sin bit 1 (0x2), no tiene ningún efecto. Si este bit se usa con bit 1, el subproceso se muestra con un seguimiento de pila.
Bit 3 (0x8)
Agrega la dirección de retorno, el puntero de pila y (en los sistemas Itanium) el valor de registro bsp a la información mostrada para cada función y suprime la presentación de argumentos de función.
Bit 4 (0x10)
Establece el contexto del proceso igual al proceso que posee el subproceso especificado mientras dure este comando. Esto da como resultado una visualización más precisa de las pilas de subprocesos.
Archivo DLL
Kdexts.dll
Información adicional
Para obtener información sobre los subprocesos en modo kernel, consulte Cambiar contextos y Controlar procesos y subprocesos. Para obtener más información sobre el análisis de procesos y subprocesos, consulte Microsoft Windows Internals, por Mark Russinovich, Alex Ionescu y David Solomon.
Comentarios
A continuación se muestra un ejemplo con 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 buscar la dirección o el identificador del subproceso que le interese.
La información útil de la pantalla !thread se explica en la tabla a continuación.
Parámetro | Significado |
---|---|
Thread address |
Número hexadecimal después de la palabra THREAD es la dirección del bloqueo ETHREAD. En el ejemplo anterior, la dirección del subproceso es 0xffffcb088f0a4480 . |
Identificador de subproceso |
Los dos números hexadecimales después de la palabra Cid son el identificador de proceso y el identificador de subproceso: process ID.thread ID. En el ejemplo anterior, el identificador de proceso se 0x0e34 y el identificador de subproceso es 0x3814. |
Bloqueo de entorno de subproceso (TEB) |
El número hexadecimal después de la palabra Teb es la dirección de bloqueo de entorno del subproceso (TEB). |
Win32Thread |
El número hexadecimal después de la palabra Win32Thread es la dirección de Win32Thread. |
Estado del subproceso |
El estado del subproceso se muestra al final de la línea que comienza con la palabra RUNNING. |
Proceso propietario |
El número hexadecimal después de las palabras Proceso propietario es la dirección de EPROCESS para el proceso propietario de este subproceso. |
Dirección de inicio |
El número hexadecimal después de las palabras Dirección de inicio es la dirección de inicio del subproceso. Esto puede aparecer en forma simbólica. |
Función de subproceso de usuario |
El número hexadecimal después de las palabras Dirección de inicio Win32 es la dirección de la función de subproceso de usuario. |
Prioridad |
La información de prioridad del subproceso sigue la palabra Prioridad. |
Seguimiento de la pila |
Aparece un seguimiento de pila para el subproceso al final de esta presentación. |