!findthreads
!findthreads 扩展根据提供的搜索条件显示目标系统上一个或多个线程的摘要信息。 当相关堆栈引用所提供的对象时,将显示线程信息。 此命令只能在内核模式调试期间使用。
语法
!findthreads [-v][-t <Thread Address>|-i <IRP Address>|-d <Device Address>|( -a <Pointer Address> -e <End Address> | -l <Range Length>)]
参数
-v
显示所有条件匹配项的详细信息。
-t **** 线程地址
搜索条件将是线程的所有模块、等待对象和 IRP,以及从附加 IRP 生成的设备对象和模块。 此选项通常提供最广泛的搜索条件。
-我 **** IRP 地址
搜索条件将是所指示 IRP 的所有模块和设备,以及对 IRP 本身的任何引用。
-d **** 设备地址
搜索条件将以设备对象为基础。 这将包括与设备对象相关的模块(通过驱动程序对象)、设备扩展、附加到设备的任何 IRP 以及附加到设备对象的任何类似信息。
-一个 **** 指针地址
向条件添加基址。 如果正确指定了 -e 或 -l,此值将是内存范围的基数。 否则将被解释为指针。
-e **** 结束地址
指定使用 -a 指定的内存范围的结束地址。
-l **** 范围长度
指定使用 -a 指定的内存范围的长度。
DLL
Windows 10 及更高版本
Kdexts.dll
其他信息
有关内核模式下线程的信息,请参阅更改上下文。 有关分析进程和线程的详细信息,请参阅 Microsoft Windows 内部资料(作者:Mark Russinovich 和 David Solomon)。
注解
下面是使用 -v 和 -t 选项的示例输出:
kd> !findthreads -v -t ffffd001ee29cdc0
Added criterion for THREAD 0xffffd001ee29cdc0
Added criterion for THREAD STACK 0xffffd001ee2bac20
ERROR: Object 0xffffffffffffffe0 is not an IRP
ERROR: unable to completely walk thread IRP list.
Added criterion for MODULE kdnic(0xfffff80013120000)
Found 63 threads matching the search criteria
Found 6 criteria matches for THREAD 0xffffe0016a383740, PROCESS 0xffffe0016a220200
Kernel stack location 0xffffd001f026a0c0 references THREAD 0xffffd001ee29cdc0
Kernel stack location 0xffffd001f026a418 references THREAD 0xffffd001ee29cdc0
Kernel stack location 0xffffd001f026a460 references THREAD 0xffffd001ee29cdc0
Kernel stack location 0xffffd001f026a4d0 references THREAD 0xffffd001ee29cdc0
Kernel stack location 0xffffd001f026a4f0 references THREAD 0xffffd001ee29cdc0
Kernel stack location 0xffffd001f026a670 references THREAD 0xffffd001ee29cdc0
ffffd001f026a0e0 nt!KiSwapContext+76
ffffd001f026a190 nt!KiSwapThread+1c8
ffffd001f026a220 nt!KiCommitThreadWait+148
ffffd001f026a2e0 nt!KeWaitForMultipleObjects+21e
ffffd001f026a800 nt!ObWaitForMultipleObjects+2b7
ffffd001f026aa80 nt!NtWaitForMultipleObjects+f6
000000c8d220fa98 nt!KiSystemServiceCopyEnd+13
000000c8d220fa98 ntdll!ZwWaitForMultipleObjects+a
...