查看有关指定进程或者所有进程的信息,包括 EPROCESS 块。
##语法
!process [/s Session] [/m Module] [Process [Flags]] !process [/s Session] [/m Module] 0 Flags ImageName
示例
kd> !process 0 0 NT ACTIVE PROCESS DUMP PROCESS 80a02a60 Cid: 0002 Peb: 00000000 ParentCid: 0000 DirBase: 00006e05 ObjectTable: 80a03788 TableSize: 150. Image: System PROCESS 80986f40 Cid: 0012 Peb: 7ffde000 ParentCid: 0002 DirBase: 000bd605 ObjectTable: 8098fce8 TableSize: 38. Image: smss.exe PROCESS 80958020 Cid: 001a Peb: 7ffde000 ParentCid: 0012 DirBase: 0008b205 ObjectTable: 809782a8 TableSize: 150. Image: csrss.exe PROCESS 80955040 Cid: 0020 Peb: 7ffde000 ParentCid: 0012 DirBase: 00112005 ObjectTable: 80955ce8 TableSize: 54. Image: winlogon.exe PROCESS 8094fce0 Cid: 0026 Peb: 7ffde000 ParentCid: 0020 DirBase: 00055005 ObjectTable: 80950cc8 TableSize: 222. Image: services.exe PROCESS 8094c020 Cid: 0029 Peb: 7ffde000 ParentCid: 0020 DirBase: 000c4605 ObjectTable: 80990fe8 TableSize: 110. Image: lsass.exe PROCESS 809258e0 Cid: 0044 Peb: 7ffde000 ParentCid: 0026 DirBase: 001e5405 ObjectTable: 80925c68 TableSize: 70. Image: SPOOLSS.EXE
输出说明
Process address
PROCESS 后面的八位十六进制数是 EPROCESS 块的地址。在前面示例的最后一个条目中,进程地址是 0x809258E0。
Process ID (PID)
单词 Cid 后的十六进制数。在前面示例的最后一个条目中,PID 是 0x44,或者十进制 68。
Process Environment Block (PEB)
Peb后面的十六进制数是进程环境块的地址。在前面示例的最后一个条目中,PEB 位于地址 0x7FFDE000。
Parent process PID
ParentCid 后面的十六进制数是父进程的PID。在前面示例的最后一个条目中,父进程 PID 是 0x26,或者十进制 38。
Image
拥有进程的模块的名称。在前面示例的最后一个条目中,所有者是 spoolss.exe。在第一个条目中,所有者是操作系统本身。
Process object address
单词 ObjectTable 之后的十六进制数。在前面示例的最后一个条目中,进程对象的地址是 0x80925c68。
示例2
要显示一个进程的完整详细信息,请将Flags设置为 7。
可以通过将Process设置为进程地址、将Process设置为进程 ID 或者将ImageName设置为可执行镜像名称来指定进程本身。
kd> !process fb667a00 7 PROCESS fb667a00 Cid: 0002 Peb: 00000000 ParentCid: 0000 DirBase: 00030000 ObjectTable: e1000f88 TableSize: 112. Image: System VadRoot fb666388 Clone 0 Private 4. Modified 9850. Locked 0. FB667BBC MutantState Signalled OwningThread 0 Token e10008f0 ElapsedTime 15:06:36.0338 UserTime 0:00:00.0000 KernelTime 0:00:54.0818 QuotaPoolUsage[PagedPool] 1480 Working Set Sizes (now,min,max) (3, 50, 345) PeakWorkingSetSize 118 VirtualSize 1 Mb PeakVirtualSize 1 Mb PageFaultCount 992 MemoryPriority BACKGROUND BasePriority 8 CommitCharge 8 THREAD fb667780 Cid 2.1 Teb: 00000000 Win32Thread: 80144900 WAIT: (WrFreePage) KernelMode Non-Alertable 80144fc0 SynchronizationEvent Not impersonating Owning Process fb667a00 WaitTime (seconds) 32278 Context Switch Count 787 UserTime 0:00:00.0000 KernelTime 0:00:21.0821 Start Address Phase1Initialization (0x801aab44) Initial Sp fb26f000 Current Sp fb26ed00 Priority 0 BasePriority 0 PriorityDecrement 0 DecrementCount 0 ChildEBP RetAddr Args to Child fb26ed18 80118efc c0502000 804044b0 00000000 KiSwapThread+0xb5 fb26ed3c 801289d9 80144fc0 00000008 00000000 KeWaitForSingleObject+0x1c2
输出说明
WAIT
此标题后的括号注释给出了等待的原因。命令dt nt!_KWAIT_REASON将显示所有等待原因的列表。
ElapsedTime
列出自进程创建以来经过的时间量。这以小时:分钟:秒.毫秒为单位显示。
UserTime
列出进程在用户模式下运行的时间。如果 UserTime 的值特别高,则它可能标识正在耗尽系统资源的进程。单位与 ElapsedTime 相同。
KernelTime
列出进程在内核模式下运行的时间。如果 KernelTime 的值特别高,它可能会识别一个正在耗尽系统资源的进程。单位与 ElapsedTime 相同。
Working Set sizes
以页为单位列出进程的当前、最小和最大工作集大小。异常大的工作集大小可能表示进程正在泄漏内存或者耗尽系统资源。
QuotaPoolUsage 条目
列出进程使用的分页和非分页池。在存在内存泄漏的系统上,查找所有进程上过多的非分页池使用情况可以告诉您哪个进程存在内存泄漏。
Clone
指示进程是否由 POSIX 或者 Interix 子系统创建。
Private
指示进程当前使用的私有(不可共享)页面的数量。这包括调入和调出内存。
参数
/s Session
指定拥有所需进程的会话。
/m Module
指定拥有所需进程的模块。
Process
指定目标计算机上进程的十六进制地址或者进程 ID。
Process的值决定了 !process 扩展名是显示进程地址还是进程 ID。如果在任何版本的 Windows 中省略Process,则调试器仅显示有关当前系统进程的数据。如果Process为 0 并且省略ImageName,调试器将显示有关所有活动进程的信息。如果为进程指定-1,则显示有关当前进程的信息。
Flags
指定要显示的详细程度。标志可以是以下位的任意组合。如果Flags为 0,则仅显示最少量的信息。默认值因 Windows 版本和Process的值而异。如果Process被省略或者Process为 0 或者 -1,则默认值为 0x3 ;否则,默认值为 0xF。
位 0 (0x1)
显示时间和优先级统计信息。
位 1 (0x2)
显示与进程关联的线程和事件及其等待状态的列表。
位 2 (0x4)
显示与进程关联的线程列表。如果这包括没有位 1 (0x2),则每个线程都显示在一行上。如果这与位 1 一起包含,则每个线程都显示有堆栈跟踪。
位 3 (0x8)
显示每个函数的返回地址和堆栈指针 函数参数的显示被抑制。
位 4 (0x10)
在此命令的持续时间内将进程上下文设置为等于指定进程。这样可以更准确地显示线程堆栈。因为这个标志相当于对指定的进程使用.process /p /r,任何现有的用户模式模块列表都将被丢弃。如果Process为零,则调试器显示所有进程,并且每个进程的进程上下文都会更改。如果您只显示单个进程并且其用户模式状态已经刷新(例如,使用.process /p /r),则没有必要使用此标志。此标志仅在与位 0 (0x1) 一起使用时有效。
ImageName
指定要显示的进程的名称。调试器显示可执行镜像名称与ImageName匹配的所有进程。镜像名称必须与 EPROCESS 块中的名称匹配。通常,这是为启动进程而调用的可执行文件名称,包括文件扩展名(通常为 .exe),并在第十五个字符后被截断。无法指定包含空格的图像名称。当ImageName被指定时,过程必须为零。