cc682/NetRoc
http://netroc682.spaces.live.com/
!pars
!pars 扩展显示指定的processor application registers file。
语法
!pars Address 
参数
Address
指定processor application registers file的地址。
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | 不可用 | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
 
该命令只能对Itanium目标机使用。
!pat
!pat 显示目标处理器的页面属性表寄存器(Page Attribute Table (PAT) registers)。
语法
!pat Flag 
!pat 
参数
Flag
如果设置Flag,调试器在显示PAT之前会先验证PAT功能是否存在。
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
该扩展只能对x86目标机使用。
!pci
!pci 扩展命令用来显示PCI(peripheral component interconnect)总线的当前状态,以及附加到该总线上的任何设备。
语法
!pci [Flags [Bus [Device [Function [MinAddress MaxAddress]]]]] 
参数
Flags
指定输出级别。可以是下面这些位的任意组合:
Bit 0 (0x1)
显示详细输出。
Bit 1 (0x2)
显示从bus 0到指定的Bus范围内的所有总线。
Bit 2 (0x4)
显示中包含原始字节格式的信息。如果设置了MinAddress、MaxAddress,或者标志的位0x8,则该标志也自动被设置。
Bit 3 (0x8)
显示中包含原始DWORD格式的信息。
Bit 4 (0x10)
显示中包含无效设备的号码(invalid device number)。如果指定了Device,则跳过该标志。
Bit 5 (0x20)
显示中包含无效功能号(invalid function numbers)。
Bit 6 (0x40)
显示中包含capabilities。
Bit 7 (0x80)
显示Intel 8086设备相关信息(Intel 8086 device-specific information)。
Bit 8 (0x100)
显示PCI配置空间(PCI configuration space)。
Bus
指定要显示的总线。Bus 可以在0到0xFF范围之内。如果省略,则显示primary bus (bus 0)的信息。如果Flags包含bit 1 (0x2), Bus 用于指定要显示的最大一个总线号。
Device
指定设备的slot device number。如果省略,则显示所有设备的信息。
Function
指定设备的slot function number。如果省略,则显示所有的设备功能(device function)。
MinAddress
指定要显示的原始字节或者原始DWORD的首地址。必须在0到0xFF之间。
MaxAddress
指定要显示的原始字节或者原始DWORD的尾地址。必须在0到0xFF之间,并且不能比MinAddress 小。
DLL
    
    
    
    
        
            | Windows NT 4.0 | Kext.dll Kdextx86.dll
 | 
        
            | Windows 2000 | Kext.dll Kdextx86.dll
 | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
该扩展命令只能对x86目标机使用。
注释
使用!ecb、!ecd、或者 !ecw来编辑PCI配置空间(PCI configuration space)。
下面的例子显示了所有总线和它们的设备的列表。该命令需要较长时间来执行。调试器扫描目标系统的PCI总线时,在显示的信息底部可以看到移动的计数器:
kd> !pci 2 ff
PCI Bus 0
00:0  8086:1237.02  Cmd[0106:.mb..s]  Sts[2280:.....]  Device  Host bridge
0d:0  8086:7000.01  Cmd[0007:imb...]  Sts[0280:.....]  Device  ISA bridge
0d:1  8086:7010.00  Cmd[0005:i.b...]  Sts[0280:.....]  Device  IDE controller
0e:0  1011:0021.02  Cmd[0107:imb..s]  Sts[0280:.....]  PciBridge 0->1-1  PCI-PCI bridge
10:0  102b:0519.01  Cmd[0083:im....]  Sts[0280:.....]  Device  VGA compatible controller
PCI Bus 1
08:0  10b7:9050.00  Cmd[0107:imb..s]  Sts[0200:.....]  Device  Ethernet
09:0  9004:8178.00  Cmd[0117:imb..s]  Sts[0280:.....]  Device  SCSI controller
下面的例子显示primary bus 上设备的详细信息。每行开头的两位数字是设备号(device number),后面跟的一位数字是功能号(function number):
kd> !pci 1 0
PCI Bus 0
00:0  8086:1237.02  Cmd[0106:.mb..s]  Sts[2280:.....]  Device  Host bridge
      cf8:80000000  IntPin:0  IntLine:0  Rom:0  cis:0  cap:0
0d:0  8086:7000.01  Cmd[0007:imb...]  Sts[0280:.....]  Device  ISA bridge
      cf8:80006800  IntPin:0  IntLine:0  Rom:0  cis:0  cap:0
0d:1  8086:7010.00  Cmd[0005:i.b...]  Sts[0280:.....]  Device  IDE controller
      cf8:80006900  IntPin:0  IntLine:0  Rom:0  cis:0  cap:0
      IO[4]:fff1       
0e:0  1011:0021.02  Cmd[0107:imb..s]  Sts[0280:.....]  PciBridge 0->1-1  PCI-PCI bridge
      cf8:80007000  IntPin:0  IntLine:0  Rom:0  cap:0  2sts:2280  BCtrl:6 ISA
      IO:f000-ffff  Mem:fc000000-fdffffff  PMem:fff00000-fffff
10:0  102b:0519.01  Cmd[0083:im....]  Sts[0280:.....]  Device  VGA compatible controller
      cf8:80008000  IntPin:1  IntLine:9  Rom:80000000  cis:0  cap:0
      MEM[0]:fe800000  MPF[1]:fe000008  
下面的例子显示bus 0,设备0x0D,功能0x01的更详细一些的信息,包括从地址0x00到0x3F之间的原始DWORD值:
kd> !pci f 0 d 1 0 3f
PCI Bus 0
0d:1  8086:7010.00  Cmd[0005:i.b...]  Sts[0280:.....]  Device  IDE controller
      cf8:80006900  IntPin:0  IntLine:0  Rom:0  cis:0  cap:0
      IO[4]:fff1       
      00000000:  70108086 02800005 01018000 00002000
      00000010:  00000000 00000000 00000000 00000000
      00000020:  0000fff1 00000000 00000000 00000000
      00000030:  00000000 00000000 00000000 00000000
附加信息
查看Plug and Play 调试获得该扩展命令的应用和更多示例。关于PCI总线的信息,查看Windows Driver Kit (WDK)文档。
!pciir
!pciir 扩展显示从PCI设备到中断控制器输入(interrupt controller input)的硬件路由(hardware routing)的内容。
语法
!pciir 
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XPWindows Server 2003
 | Kdexts.dll | 
        
            | Windows Vista和之后 | 不可用 | 
    
 
该扩展命令只能在未启用ACPI(Advanced Configuration and Power Interface)的x86目标机上使用。
附加信息
使用!acpiirqarb 扩展在启用ACPI的机器上查看类似信息。
关于PCI总线的信息,查看Windows Driver Kit (WDK)文档。
!pcitree
!pcitree 扩展显示PCI设备对象的信息,包括子PCI总线和CardBus总线,以及附加到他们上的设备。
语法
!pcitree 
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
注释
下面是一个示例:
kd> !pcitree
Bus 0x0 (FDO Ext fe517338)
  0600 12378086 (d=0,  f=0) devext fe4f4ee8 Bridge/HOST to PCI
  0601 70008086 (d=d,  f=0) devext fe4f4ce8 Bridge/PCI to ISA
  0101 70108086 (d=d,  f=1) devext fe4f4ae8 Mass Storage Controller/IDE
  0604 00211011 (d=e,  f=0) devext fe4f4788 Bridge/PCI to PCI
Bus 0x1 (FDO Ext fe516998)
  0200 905010b7 (d=8,  f=0) devext fe515ee8 Network Controller/Ethernet
  0100 81789004 (d=9,  f=0) devext fe515ce8 Mass Storage Controller/SCSI
  0300 0519102b (d=10, f=0) devext fe4f4428 Display Controller/VGA
Total PCI Root busses processed = 1
要根据最后的设备显示来理解输出的内容。它的base class 为03、subclass 为00、Device ID 为0x0519,、Vendor ID 为0x102B。这些值是设备本身固有的。
"d="后面的数字是设备号;"f="后的数字是功能号(function number)。"devext"后是设备扩展的地址: 0xFE4F4428。最后显示base class 名字和subclass名字。
要获得某个设备的更多信息,可以使用!devext 扩展命令,并且将设备扩展地址作为参数。对这类设备,命令应该像下面一样:
kd> !devext fe4f4428 pci 
如果!pcitree 扩展产生一个错误,通常意味着PCI符号没有正确的加载。使用.reload pci.sys来修正这个问题。
附加信息
查看Plug and Play调试来获得该扩展命令的应用。关于PCI总线和PCI设备对象的信息,查看 Windows Driver Kit (WDK)文档。
!pcm
!pcm 扩展显示指定的private cache map。该扩展仅在Windows 2000中可用。
语法
!pcm Address 
参数
Address
指定private cache map的地址。
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | 不可用(查看注释节) | 
    
 
注释
该扩展仅在Windwos 2000中支持。在Windows XP和之后的Windows中,可以使用dt nt!_PRIVATE_CACHE_MAP Address命令。
附加信息
关于缓存管理的信息,查看Microsoft Windows SDK 文档,以及Mark Russinovich 和David Solomon编写的Microsoft Windows Internals。
其他缓存管理命令的信息,可以查看!cchelp扩展的参考。
!pcr
!pcr 扩展显示指定处理器上的处理器控制域(Processor Control Region (PCR))的当前状态。
语法
!pcr [Processor] 
参数
Processor
指定要获取哪个处理器的PCR信息。如果省略Processor,则使用当前处理器。
DLL
    
    
    
    
        
            | Windows NT 4.0 | Kdextx86.dll | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
注释
处理器控制块(PRCB)是PCR的一个扩展。可以通过!prcb 命令来显示。
下面是x86目标机上的!pcr扩展命令的示例:
kd> !pcr 0
KPCR for Processor 0 at ffdff000:
    Major 1 Minor 1
      NtTib.ExceptionList: 801626e0
          NtTib.StackBase: 801628f0
         NtTib.StackLimit: 8015fb00
       NtTib.SubSystemTib: 00000000
            NtTib.Version: 00000000
        NtTib.UserPointer: 00000000
            NtTib.SelfTib: 00000000
                  SelfPcr: ffdff000
                     Prcb: ffdff120
                     Irql: 00000000
                      IRR: 00000000
                      IDR: ffffffff
            InterruptMode: 00000000
                      IDT: 80043400
                      GDT: 80043000
                      TSS: 803cc000
            CurrentThread: 8015e8a0
               NextThread: 00000000
               IdleThread: 8015e8a0
                DpcQueue:  0x80168ee0 0x80100d04 ntoskrnl!KiTimerExpiration
                          
显示中的一个条目是中断请求级别(IRQL)。!pcr 扩展显示的是当前IRQL,但是通常对当前IRQL都不是很感兴趣。Bug check或者调试器连接之前的IRQL要更加有用一些。可以通过!irql来显示这种IRQL,但是只有针对运行Windows Server2003和之后版本Windows的机器才有用。
附加信息
关于PCR和PRCB的更多信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pcrs
!pcrs 扩展命令显示Intel Itanium处理器的控制寄存器(control register)。
语法
!pcrs Address 
参数
Address
指定processor control registers file的地址。
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | 不可用 | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
该扩展命令只能对Itanium目标机使用。
注释
不要将!pcrs扩展和 !pcr 混淆,后者用来显示处理器控制域(processor control region)的当前状态。
!pfn
!pfn 扩展用于显示指定的页面帧(page frame)或者整个页面帧数据库(page frame database)。
语法
!pfn PageFrame 
参数
PageFrame
指定要显示的页面帧的16进制序号。
DLL
    
    
    
    
        
            | Windows NT 4.0 | Kdextx86.dll | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
注释
可以通过!pte扩展获得某个虚拟地址的页面帧序号。
下面是该扩展的输出示例:
kd> !pte 801544f4
801544F4  - PDE at C0300800        PTE at C0200550
          contains 0003B163      contains 00154121
        pfn 3b G-DA--KWV    pfn 154 G--A--KRV
kd> !pfn 3b
    PFN 0000003B at address 82350588
    flink       00000000  blink / share count 00000221  pteaddress C0300800
    reference count 0001                                 color 0
    restore pte 00000000  containing page        000039  Active           
               
kd> !pfn 154
    PFN 00000154 at address 82351FE0
    flink       00000000  blink / share count 00000001  pteaddress C0200550
    reference count 0001                                 color 0
    restore pte 00000060  containing page        00003B  Active     M     
    Modified          
附加信息
关于页表、页目录、页面帧的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pmc
!pmc 扩展显示指定地址处的性能监控计数器(Performance Monitor Counter (PMC))寄存器。
该命令仅在Itanium目标机上支持。
语法
!pmc [- Option] Expression [DisplayLevel] 
参数
Option
可以是下面这些值中任意一个:
gen
将该寄存器当作常规PMC寄存器显示。
btb
将该寄存器当作branch trace buffer (BTB) PMC寄存器进行显示。
Expression
指定PMC的16进制地址。可以使用表达式@kpfcgen 和@kpfcbtb 用作参数的值。
如果Expression 是@kpfcgen,调试器将当前处理器的PMC寄存器当作常规PMC寄存器显示。还可以通过将Option 设置为gen,并且Expression 值使用@kpfc4、@kpfc5、@kpfc6或者@kpfc7来将当前处理器的PMC寄存器作为常规PMC寄存器显示。
如果Expression 为@kpfcbtb,调试器将当前处理器的PMC寄存器当作BTB PMC寄存器显示。也可以通过Optio设置为btb,并且Expression 的值使用@kpfc12来当作BTB PMC寄存器显示。
DisplayLevel
可以是下面这些值中任意一个:
0
仅显示每个PMC寄存器字段的值。这是默认情况。
1
显示非保留和非忽略的PCM寄存器字段的详细信息。
2
显示所有PMC寄存器字段的详细信息,包括被忽略的和保留的。
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | 不可用 | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
!pmssa
!pmssa 扩展显示指定的processor Minimal State Save Area (也称为Min-StateSave Area)。
该扩展命令仅在Itanium目标机上可用。
语法
!pmssa Address 
参数
Address
指定某个processor Min-StateSave Area的地址。
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | 不可用 | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
!pnpevent
!pnpevent 扩展显示即插即用(Plug and Play)设备事件队列。
语法
!pnpevent [DeviceEvent] 
参数
DeviceEvent
指定要显示的设备事件(device event)的地址。如果为0或者省略,则显示该队列中所有设备事件的树(tree)。
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
附加信息
查看Plug and Play调试获得该扩展命令的应用。关于Plug and Play驱动程序的信息,查看Windows Driver Kit (WDK) 文档。
!pocaps
!pocaps 扩展显示目标机的电源能力(power capability)。
语法
!pocaps 
DLL
    
    
    
    
        
            | Windows NT 4.0 | 不可用 | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
注释
下面是该命令输出的示例:
kd> !pocaps
PopCapabilities @ 0x8016b100
  Misc Supported Features:  S4 FullWake
  Processor Features:      
  Disk Features:            SpinDown
  Battery Features:        
  Wake Caps
    Ac OnLine Wake:         Sx
    Soft Lid Wake:          Sx
    RTC Wake:               Sx
    Min Device Wake:        Sx
    Default Wake:           Sx
附加信息
要查看系统的电源策略(power policy),可以使用!popolicy 扩展命令。关于电源能力和电源策略的更多信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pool
!pool扩展显示指定的内存池分配的信息,或者整个系统范围内内存池的分配信息。
语法
!pool [Address [Flags]] 
参数
Address
指定要显示的内存池入口。如果Address是 -1,该命令显示进程中所有堆(all heaps in the process)的信息。如果Address 为0或省略,命令显示进程堆(process heap)的信息。
Flags
指定显示的级别。可以是下面这些位值的任意组合,默认值为0:
Bit 0 (0x1)
显示内存池内容,而不仅仅是头部(pool header)。
Bit 1 (0x2)
(Windows 2000和之后) 不显示所有内存池的头信息,除了实际包含指定的Address的那个。
Bit 31 (0x80000000)
(Windows XP和之后) 不显示池类型(type)和标签(tag)。
DLL
    
    
    
    
        
            | Windows NT 4.0 | Kdextx86.dll | 
        
            | Windows 2000 | Kdextx86.dll | 
        
            | Windows XP和之后 | Kdexts.dll | 
    
 
注释
在Windows XP和之后版本的Windows中,!pool 扩展显示每个分配关联的内存池标签(pool tag)。还会显示该标签的所有者。显示是基于pooltag.txt 文件的内容的。该文件位于Windwos调试工具包安装目录的triage 子目录下。如果需要的话,可以通过编辑该文件来添加自己的项目相关的其他pool tag。
警告  如果在当前版本安装的目录上安装Windwos调试工具包的升级版本,则它会覆盖该目录中所有文件,包括pooltag.txt。如果改变或者替换了示例的pooltag.txt,则要将它先保存到其他目录中。重新安装调试器之后,可以再用保存的那个pooltag.txt来进行覆盖。
如果!pool 扩展报告内存池破坏,应该使用!poolval来进行调查。
下面是一个例子。如果Address 指定0xE1001050,则显示这个块中的所有内存池的头部,并且0xE1001050本身用星号(*)标记。
kd> !pool e1001050 
 e1001000 size:   40 previous size:    0  (Allocated)  MmDT
 e1001040 size:   10 previous size:   40  (Free)       Mm  
*e1001050 size:   10 previous size:   10  (Allocated) *ObDi
 e1001060 size:   10 previous size:   10  (Allocated)  ObDi
 e1001070 size:   10 previous size:   10  (Allocated)  Symt
 e1001080 size:   40 previous size:   10  (Allocated)  ObDm
 e10010c0 size:   10 previous size:   40  (Allocated)  ObDi
.....
这个例子中,最右边的一列是pool tag。这一列左边显示这个pool是空闲的还是已分配的。
下面的命令显示内存池头部和内容(pool headers and pool contents):
kd> !pool e1001050 1
 e1001000 size:   40 previous size:    0  (Allocated)  MmDT
    e1001008  ffffffff 0057005c 004e0049 004f0044
    e1001018  ffffffff 0053005c 00730079 00650074
 e1001040 size:   10 previous size:   40  (Free)       Mm  
    e1001048  ffffffff e1007ba8 e1501a58 01028101
    e1001058  ffffffff 00000000 e1000240 01028101
*e1001050 size:   10 previous size:   10  (Allocated) *ObDi
    e1001058  ffffffff 00000000 e1000240 01028101
    e1001068  ffffffff 00000000 e10009c0 01028101
 e1001060 size:   10 previous size:   10  (Allocated)  ObDi
    e1001068  ffffffff 00000000 e10009c0 01028101
    e1001078  ffffffff 00000000 00000000 04028101
......
附加信息
关于内存池的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。