NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----88

cc682/NetRoc

http://netroc682.spaces.live.com/

!thread

!thread 扩展显示目标系统中线程包括ETHREAD块在内的摘要信息。该命令只能在内核模式调试下使用。

这个扩展命令和.thread (Set Register Context)命令不同。

语法

Windows NT 4.0 和Windows 2000的语法:

!thread [Address [Flags]] 

Windows XP的语法:

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

参数

-p

显示拥有该线程的进程的摘要信息。

-t

包含这个选项时,Address是线程ID,而不是线程地址。

Address

指定目标机上线程的16进制地址。如果Address为-1或省略,则表示当前线程。

Flags

指定显示的详细级别。Flags可以是下面这些位的任意组合。如果Flags为0,只会显示最少量的信息。默认为0x6:

Bit 1 (0x2)

显示线程的等待状态。

Bit 2 (0x4)

如果不和Bit 1(0x2)一起使用则不会起作用。如果和Bit 1一起使用,线程会和调用堆栈一起显示出来。

Bit 3 (0x8)

(Windows XP和之后)

在每个函数的显示信息中加入返回地址、堆栈指针、以及bsp寄存器的值(在Itanium系统中),但是不显示函数的参数。

Bit 4 (0x10)

(Windows XP和之后) 在这个命令持续期间,将进程上下文设置为拥有指定线程的那个进程。这回使得线程调用堆栈的显示更加精确。

DLL

Windows NT 4.0

Kdextx86.dll

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

 

注释

下面是Windows 2000系统上的示例:

kd> !thread ff8632c0
THREAD ff8632c0  Cid 38c.380  Teb: 7ffde000  Win32Thread: e1bc1a08 WAIT: (WrUserRequest) UserMode Non-Alertable
    ff8543e0  SynchronizationEvent
Not impersonating
Owning Process ff89c7a0
WaitTime (seconds)      16923
Context Switch Count    67                   LargeStack
UserTime                  0:00:00.0000
KernelTime                0:00:00.0093
Start Address 0x77e878c1
Win32 Start Address 0x01003dd0
Stack Init fd536000 Current fd535c20 Base fd536000 Limit fd531000 Call 0
Priority 12 BasePriority 8 PriorityDecrement 0 DecrementCount 0

ChildEBP RetAddr  Args to Child
fd535c38 8012d61c 00000000 e1bc1a08 00000001 ntoskrnl!KiSwapThread+0xc5
fd535cbc 801672a2 00000001 00000001 000021bf ntoskrnl!KeWaitForSingleObject+0x1a1
fd535d4c 80161691 0006ff08 00000000 00000000 ntoskrnl!ExFreePool+0xb
fd535d4c a01772a8 0006ff08 00000000 00000000 ntoskrnl!KiSystemService+0xc4
ffffffff 00000000 00000000 00000000 00000000 +0xa01772a8

!thread 输出中的重要信息在下表中描述。

参数

含义

Thread address

单词THREAD 后面的16进制数字是ETHREAD 块的地址。前面例子中,线程地址为0xFF8632C0。

Thread ID

Cid 后面的两个16进制数字是进程ID和线程ID:进程ID.线程ID。前面例子中,进程ID为0x38C,或者10进制的908,线程ID为0x380,10进制是896。

Thread Environment Block (TEB)

Teb 后面的16进制数字是线程环境块(TEB)的地址。前面例子中的TEB地址为0x7FFDE000。

System Service Dispatch Table

Win32Thread 后面的16进制地址是系统服务分配表(system service dispatch table)的地址。前面例子中位于0xE1BC1A08。

Thread State

线程状态显示在以WAIT 开头的行的末尾。前面例子中线程是在non-alertable 状态下。

Owning Process

Owning Process 后的16进制地址是拥有该线程的进程的EPROCESS地址。

Start Address

Start Address后的16进制数字是线程的起始地址。可能是以符号化的形式显示的。

User Thread Function

Win32 Start Addres后面的16进制数字是用户的线程函数的地址。

Priority

Priority 后面是线程的优先级信息。

Stack trace

输出的末尾是线程的调用堆栈。

 

附加信息

关于内核模式下线程的信息,查看改变上下文。关于分析进程和线程的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

!threadfields

!threadfields 扩展命令显示执行线程块(ETHREAD)中的名字和偏移字段。

语法

!threadfields 

DLL

Windows NT 4.0

Kdextx86.dll

Windows 2000

Kdextx86.dll

Windows XP和之后

不可用(查看注释部分)

注释

该扩展命令在Windows XP和之后的系统中不能使用。可以用dt (Display Type)命令来直接显示ETHREAD结构:

kd> dt nt!_ETHREAD 

下面是在Windows 2000系统上的!threadfields 示例:

kd> !threadfields
 ETHREAD structure offsets:

    Tcb:                           0x0
    CreateTime:                    0x1b0
    ExitTime:                      0x1b8
    ExitStatus:                    0x1c0
    PostBlockList:                 0x1c4
    TerminationPortList:           0x1cc
    ActiveTimerListLock:           0x1d4
    ActiveTimerListHead:           0x1d8
    Cid:                           0x1e0
    LpcReplySemaphore:             0x1e8
    LpcReplyMessage:               0x1fc
    LpcReplyMessageId:             0x200
    ImpersonationInfo:             0x208
    IrpList:                       0x20c
    TopLevelIrp:                   0x214
    ReadClusterSize:               0x21c
    ForwardClusterOnly:            0x220
    DisablePageFaultClustering:    0x221
    DeadThread:                    0x222
    HasTerminated:                 0x224
    GrantedAccess:                 0x228
    ThreadsProcess:                0x22c
    StartAddress:                  0x230
    Win32StartAddress:             0x234
    LpcExitThreadCalled:           0x238
    HardErrorsAreDisabled:         0x239

附加信息

关于ETHREAD块的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

!time

!time 扩展命令已经废除。使用.time (Display System Time)命令来替代。

!timer

!timer 命令显示所有系统定时器使用的详细列表。

语法

!timer 

DLL

Windows NT 4.0

Kdextx86.dll

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

!timer 扩展会显示保存了系统中所有定时器对象的定时器树(timer tree)。

下面是示例:

kd> !timer
Dump system timers

Interrupt time: 9f760774 00000000 [12/ 8/2000 10:59:22.685 (Pacific Standard Time)]

List Timer    Interrupt Low/High     Fire Time              DPC/thread
  0 8016aea0 P 9fbd8e00 00000000 [12/ 8/2000 10:59:23.154]  ntoskrnl!PopScanIdleList 
  1 8257f118   e4e4225a 00000000 [12/ 8/2000 11:01:19.170]  thread 8257f030 
  3 80165fc0   286be1c9 0000594a [ 4/ 1/2001 01:59:59.215]  ntoskrnl!ExpTimeZoneDpcRoutine 
    80165f40   2a7bf8d9 006f105e [12/31/2099 23:59:59.216]  ntoskrnl!ExpCenturyDpcRoutine 
  5 825a0bf8   a952e1c2 00000000 [12/ 8/2000 10:59:39.232]  thread 825a0b10 
 10 8251c7a8   41f54d84 00000001 [12/ 8/2000 11:03:55.310]  thread 8251c6c0 
    8249fe88   41f54d84 00000001 [12/ 8/2000 11:03:55.310]  thread 8249fda0 
 11 8250e7e8   bc73ffde 00000000 [12/ 8/2000 11:00:11.326]  thread 8250e700 

.....

237 82757070   9f904152 00000000 [12/ 8/2000 10:59:22.857]  +f7a56f2e 
    82676348   9f904152 00000000 [12/ 8/2000 10:59:22.857]  +fe516352 
    82728b78   9f904152 00000000 [12/ 8/2000 10:59:22.857]  +fe516352 
238 fe4b5d78   9f92a3ac 00000000 [12/ 8/2000 10:59:22.873]  thread 827ceb10 
    801658f0   9f92a3ac 00000000 [12/ 8/2000 10:59:22.873]  ntoskrnl!CcScanDpc 
239 8259ad40   765a6f19 00000bba [12/23/2000 09:07:22.900]  thread 825d3670 
250 826d42f0   1486bed8 80000000 [         NEVER         ]  thread 825fa030 

Total Timers: 193, Maximum List: 7
Current Hand: 226, Maximum Search: 0

Wakeable timers:

附加信息

关于定时器对象的信息,查看Windows Driver Kit (WDK)文档。

!tokenfields

!tokenfields 扩展命令显示访问令牌对象(TOKEN结构)中的名字和偏移字段。

语法

!tokenfields 

DLL

Windows NT 4.0

Kdextx86.dll

Windows 2000

Kdextx86.dll

Windows XP和之后

不可用(查看注释部分)

注释

该命令在Windows XP和之后版本中都不支持。可以使用dt (Display Type) 命令来直接显示TOKEN结构:

kd> dt nt!_TOKEN 

要查看某个特定的TOKEN结构的实例,可以使用!token扩展。

下面是Windows 2000系统上!tokenfields 的示例:

kd> !tokenfields
 TOKEN structure offsets:
    TokenSource:           0x0
    AuthenticationId:      0x18
    ExpirationTime:        0x28
    ModifiedId:            0x30
    UserAndGroupCount:     0x3c
    PrivilegeCount:        0x44
    VariableLength:        0x48
    DynamicCharged:        0x4c
    DynamicAvailable:      0x50
    DefaultOwnerIndex:     0x54
    DefaultDacl:           0x6c
    TokenType:             0x70
    ImpersonationLevel:    0x74
    TokenFlags:            0x78
    TokenInUse:            0x79
    ProxyData:             0x7c
    AuditData:             0x80
    VariablePart:          0x84

附加信息

关于TOKEN结构的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。(Microsoft Windows SDK文档中描述的用户模式令牌结构会有少许不同。)

!trap

!trap 扩展命令已经废除。使用.trap (Display Trap Frame)命令来替代。

!tss

!tss扩展命令已经废除。使用.tss (Display Task State Segment)命令替代。

!tz

!tz 扩展用于显示指定的power thermal zone结构。

语法

!tz [Address] 

参数

Address

要显示的power thermal zone的地址。如果省略该参数,则显示目标机中所有thermal zones。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

任何时候都可以通过按下CTRL+BREAK (WinDbg) 或CTRL+C (KD)来中止命令执行。

附加信息

要查看系统的电源特性,可以使用!pocaps 扩展命令。要查看系统的电源策略,可以使用!popolicy 扩展命令。关于电源特性和电源策略的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

!tzinfo

!tzinfo 扩展显示指定的thermal zone information 结构的内容。

语法

!tzinfo Address 

参数

Address

要显示的thermal zone information结构地址。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

附加信息

要查看系统的电源特性,可以使用!pocaps 扩展命令。要查看系统的电源策略,可以使用!popolicy 扩展命令。关于电源特性和电源策略的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

!ubc

!ubc 扩展命令清除一个用户空间的断点。

语法

!ubc BreakpointNumber 

参数

BreakpointNumber

指定要清除的断点号。星号(*)表示所有断点。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

该命令可以永久的删除用!ubp设置的断点。

参见

!ubd!ube!ubl!ubp

!ubd

!ubd 扩展命令暂时禁用用户空间的断点。

语法

!ubd BreakpointNumber 

参数

BreakpointNumber

指定要禁用的断点号。星号(*)表示所有断点。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

被禁用的断点会被忽略。使用!ube来重新启用断点。

参见

!ubc!ube!ubl!ubp

!ube

!ube扩展命令重新启用用户空间断点。

语法

!ube BreakpointNumber 

参数

BreakpointNumber

指定要启用的断点号。星号(*)表示所有断点。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

该命令用于重新启用被!ubd禁止的断点。

参见

!ubc!ubd!ubl!ubp

!ubl

!ubl 列出所有用户空间断点以及它们的当前状态。

语法

!ubl 

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

下面是一个使用和显示用户空间断点的示例:

kd> !ubp 8014a131
This command is VERY DANGEROUS, and may crash your system!
If you don't know what you are doing, enter "!ubc *" now!

kd> !ubp 801544f4

kd> !ubd 1

kd> !ubl
 0: e ffffffff`8014a131 (ffffffff`82deb000) 1 ffffffff
 1: d ffffffff`801544f4 (ffffffff`82dff000) 0 ffffffff

列出的每一行都包括断点号、状态(启用为e,禁用为d)、设置断点的虚拟地址、实际断点的物理地址、字节位置,以及设置断点时该内存位置原来的内容。

参见

!ubc!ubd!ube!ubp

!ubp

!ubp 扩展命令在用户内存空间设置一个断点。

语法

!ubp Address 

参数

Address

指定要设置断点的用户空间内的16进制虚拟地址。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

!ubp 扩展命令在用户空间设置一个断点。该断点实设置在实际的物理页面上,而不仅仅在虚拟页面上的。

设置物理断点(physical breakpoint)会同时改变页面的所有虚拟拷贝(virtual copy), 造成不可预知的结果。一种可能的情况就是破坏系统状态,造成bug check或者其他的系统崩溃的情况。因此,如果必须要使用这种断点的话,要非常慎重。

该命令不能用来在已经换出的页面上设置断点。如果页面在断点设置之后被换出内存,那么断点不再存在。

不能再页表或页目录中设置断点。

每个断点都有一个关联的断点号。可以使用!ubl来查看指派的断点号。断点创建时是起用的。要步过断点,必须先使用!ubd来禁用它。使用!ubc清除断点。

参见

!ubc!ubd!ube!ubl

!urb

!urb 扩展命令已经废除。使用dt URB命令替代。

!vad

!vad 扩展显示一个或多个虚拟地址详细的虚拟地址描述符(virtual address descriptor (VAD))。

语法

!vad VAD-Root [Flags

参数

VAD-Root

指定要显示的VAD树的根的16进制地址。

Flags

指定显示的格式。可能的值如下:

0

显示基于VAD-Root 的整个VAD树。(这是默认情况。)

1

仅显示由VAD-Root 指定的VAD。这种显示会包含更详细的分析。

DLL

Windows NT 4.0

Kdextx86.dll

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

使用!process 命令可以找到任何进程的VAD的根地址。

下面是!vad 扩展的示例:

kd> !vad 824bc2f8
VAD     level      start      end    commit
82741bf8 ( 1)      78000    78045         8 Mapped  Exe  EXECUTE_WRITECOPY
824ef368 ( 2)      7f6f0    7f7ef         0 Mapped       EXECUTE_READ
824bc2f8 ( 0)      7ffb0    7ffd3         0 Mapped       READONLY
8273e508 ( 2)      7ffde    7ffde         1 Private      EXECUTE_READWRITE
82643fc8 ( 1)      7ffdf    7ffdf         1 Private      EXECUTE_READWRITE

Total VADs:     5  average level:    2  maximum depth: 2

kd> !vad 824bc2f8 1

VAD @ 824bc2f8
  Start VPN:         7ffb0  End VPN:    7ffd3  Control Area:  827f1208
  First ProtoPte: e1008500  Last PTE e100858c  Commit Charge         0 (0.)
  Secured.Flink          0  Blink           0  Banked/Extend:        0 Offset 0
   ViewShare NoChange READONLY

SecNoChange 

附加信息

关于虚拟地址描述符的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

!validatelist

!validatelist 扩展验证双链表的正反方向链接的正确性。

语法

!validatelist Address 

参数

Address

指定双链表的地址。

DLL

Windows NT 4.0

不可用

Windows 2000

不可用

Windows XP和之后

Kdexts.dll

注释

使用Ctrl+Break (WinDbg) 或者Ctrl+C (KD)来停止执行。

!verifier

!verifier 扩展命令显示驱动程序验证器(Driver Verifier)的状态和它的行为。

Driver Verifier在Windows 2000和之后版本的Windows中都包含。它在调试版和发行版系统中都可以使用。关于Driver Verifier的信息,查看Windows Driver Kit (WDK) 文档中的Driver Verifier 主题。

语法

Windows 2000的语法

!verifier [Flags [Image]] 

Windows XP和之后的语法

!verifier [Flags [Image]] 
!verifier 4 [Quantity
!verifier 8 [Quantity
!verifier 0x20 [CompletionTime CancelTime ForceCancellation
!verifier 0x40 [Quantity
!verifier 0x80 [Quantity]
!verifier 0x80 Address
!verifier 0x100 [Quantity]
!verifier 0x100 Address
!verifier ? 

参数

Flags

指定命令输出中显示哪些信息。如果Flags的值等于4、 8、 0x20、0x40、 0x80、或者0x100,那么!verifier 其他的参数是根据这些标志指定的值来解析的。如果Flags 是任何其他的值,即使设置了这些位中的一个或几个,也只允许使用FlagsImage参数。Flags 可以是这些bit值的和,默认为0:

Bit 0 (0x1)

显示被验证的所有驱动程序的名字。同时还会显示当前分配给每个驱动的分页和非分页池的字节数。

Bit 1 (0x2)

显示内存池的信息(pool size、 headers和pool tags),以及已卸载驱动遗留下来的还未释放掉(outstanding)的内存。如果没有同时设置bit 0(0x1),则这个flag无效

Bit 2 (0x4)

(Windows XP和之后) 显示fault injection information。每个分配(each allocation)的代码的返回地址、符号名字和偏移都会显示出来。如果Flags 刚好是0x4 并且使用了Quantity 参数,则可以选择显示的记录的数量。否则,会显示4条记录。

Bit 3 (0x8)

(Windows XP和之后) 显示被验证的驱动程序最近的一次IRQL改变。包括旧IRQL、新IRQL、处理器和时间戳。如果Flags 刚好是0x8并且包含了Quantity 参数,则可以选择显示出来的记录个数,否则会显示4条记录。

Bit 5 (0x20)

(Windows Vista和之后) 显示和驱动程序验证器的Driver Hang Verification 选项相关的信息。如果指定了CompletionTimeCancelTime、和ForceCancellation 参数,它们会替换先前的Driver Hang Verification 设置。

Bit 6 (0x40)

(Windows Vista和之后) 显示驱动程序验证器的Force Pending I/O Requests 选项的信息,包括从forced pending IRP日志中获得的纪录。

Quantity 参数指定要显示的记录个数。默认情况下会显示整个日志。

Bit 7 (0x80)

(Windows Vista和之后) 显示kernel pool Allocate/Free log 的信息。

Quantity 参数指定显示的记录数量。默认情况下显示整个日志。

如果指定了Address,则只显示kernel pool Allocate/Free log 中和这个地址相关的信息。

Bit 8 (0x100)

(Windows Vista和之后) 显示IoAllocateIrp 、IoCompleteRequest 和IoCancelIrp 调用的日志信息。

Quantity 参数指定要显示的记录条数,默认显示所有记录。

如果指定了Address,则只显示和指定的IRP关联的记录。

Image

如果使用了Flags,并且不等于4、 8或0x10, Image 用于指定驱动程序的名字。Image 用来过滤Flags值为0x1和0x2时显示的信息:只保留指定的驱动程序。这个驱动程序必须当前是被验证状态。

Quantity

(Windows XP和之后) 如果Flags恰好等于0x4, Quantity 指定要显示的fault injection records的数量。如果Flags恰好等于0x8, Quantity 指定要显示的IRQL日志的条数。如果Flags 刚好为0x40,Quantity 指定显示的forced pending IRP日志中的记录条数。如果Flags刚好为0x80,Quantity 指定要显示的kernel pool Allocate/Free log 记录条数。如果 Flags等于0x100,Quantity 指定要显示的IoAllocateIrp 、IoCompleteRequest 和IoCancelIrp 调用日志的记录条数。

CompletionTime

(Windows Vista和之后)  指定IRP完成的时间限制,以毫秒为单位。默认值为0x2710 (10 秒)。如果驱动程序超出了这个限制,则会在 Driver Hang Verification 日志中记录completion routine。当CompletionTime0时,Driver Verifier 不会监视IRP完成。Driver Hang Verification 参数仅在Flags 设置为0x20时才支持。

CancelTime

(Windows Vista和之后) 指定取消(canceling)一个IRP的时间限制,以毫秒为单位。默认值为0x1388 (5 秒)。如果驱动超出这个限制,则Driver Hang Verification日志中会记录cancellation routine。CancelTime0时,Driver Verifier不会监视IRP的取消。 Driver Hang Verification参数仅在 Flags 设置为0x20时支持。

ForceCancellation

(Windows Vista和之后) 启用或禁用对CompletionTime时间内没有完成的IRP的取消(cancellation)。 将ForceCancellation 设置为1来启用强制取消(forced cancellation)。ForceCancellation 设置为0来禁用强制取消。默认值为0。Driver Hang Verification参数仅在Flags为 0x20时可用。

?

(Windows XP和之后) 在调试器命令窗口中显示该扩展命令的简单帮助。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll

Windows XP和之后

Kdexts.dll

注释

用驱动程序验证器来测试图形驱动程序时,要使用!gdikdx.verifier 扩展命令来替代!verifier

4、 8、0x20、 0x40、 0x80和0x100 是Flags 的特殊值。使用这些值的时候,会用到参数部分列出的特殊参数,并且只会显示和这些标志值相关的信息。

如果Flags使用了任何其他值,即使设置了这些特殊位的一个或者多个,也只允许使用FlagsImage参数。这种情况下,除了其他信息之外,!verifier还会显示激活的驱动程序验证器选项,以及内存池分配、IRQL提升、自旋锁和 trims 的统计。

如果Flags 等于0x20,驱动程序验证器的Driver Hang Verification选项将使用CompletionTimeCancelTimeForceCancellation。这些新的值会立即生效并且持续到下一次启动。重新启动计算机时,它们会恢复到默认值。

同样,如果Flags 等于0x20 (使用或不使用附加参数),则打印Driver Hang Verification日志。关于对这个日志的解读,查看Windows Driver Kit (WDK)文档中驱动程序验证器文档的Driver Hang Verification小节。

下面是Windows XP计算机上!verifier 扩展命令的示例。注意输出是按照驱动程序名排序:

kd> !verifier 0xf

Verify Level 1f ... enabled options are:
      special pool
      special irql
      inject random pool failures
      all pool allocations checked on unload
      Io subsystem checking enabled

Summary of All Verifier Statistics

RaiseIrqls                             0x0
AcquireSpinLocks                       0x22a
Synch Executions                       0xbcd7
Trims                                  0x20e

Pool Allocations Attempted             0x48
Pool Allocations Succeeded             0x48
Pool Allocations Succeeded SpecialPool 0x48
Pool Allocations With NO TAG           0x0
Pool Allocations Failed                0x0
Pool Allocations Failed Deliberately   0x0

Current paged pool allocations         0x8 for 000002D8 bytes
Peak paged pool allocations            0xa for 00000494 bytes
Current nonpaged pool allocations      0xb for 00003038 bytes
Peak nonpaged pool allocations         0xb for 00003038 bytes

Driver Verification List

Entry     State           NonPagedPool   PagedPool   Module

fe527df8 Loaded           00002094       000002b8    ftdisk.sys

Current Pool Allocations  00000007    00000005
Current Pool Bytes        000002b8    00002094
Peak Pool Allocations     00000009    00000005
Peak Pool Bytes           00000338    00002094

PoolAddress  SizeInBytes    Tag       CallersAddress
f7b1bff0     0x00000010     ScFt      fdbac7af
f7b1df88     0x00000078     ScFt      fdbb6e9f
f7bfbfd0     0x00000030     ScFt      fdbac7af
fe4e4000     0x00002000     ScFt      fdba01e6
f7c19ff8     0x00000004     ScFt      fdba2677
f7c2bfb0     0x00000050     ScFt      fdbac2c1
f7c2df60     0x000000a0     ScFt      fdba672e
f7c47fe0     0x00000020     ScFt      fdba6968
f7c73f60     0x000000a0     ScFt      fdba672e
f7c8dfe0     0x00000020     ScFt      fdba6968
f7cb9f60     0x000000a0     ScFt      fdba672e
f7cd3fe0     0x00000020     ScFt      fdba6968

fe527d68 Loaded           00000f84       00000000    i8042prt.sys

Current Pool Allocations  00000000    00000005
Current Pool Bytes        00000000    00000f84
Peak Pool Allocations     00000002    00000005
Peak Pool Bytes           000001bc    00000f84

PoolAddress  SizeInBytes    Tag       CallersAddress
f8a6ff40     0x000000c0     8042      fdde2eec
f8a71f88     0x00000074     8042      fdde2f3e
f8cf1b50     0x000004b0     8042      fdddf64c
f93bb6a0     0x00000960     8042      fdde0990
f93b9fc0     0x00000040     8042      fdddfd0e

fe527cd8 Loaded           00000020       00000020    flpydisk.sys

Current Pool Allocations  00000001    00000001
Current Pool Bytes        00000020    00000020
Peak Pool Allocations     00000001    00000001
Peak Pool Bytes           00000020    00000020

PoolAddress  SizeInBytes    Tag       CallersAddress
f93abfe0     0x00000020     Flop      fdf5dcb5
f93affe0     0x00000020     Flop      fdf5b75d

----------------------------------------------- 
Fault injection trace log                       
----------------------------------------------- 
No fault injection traces found. 
----------------------------------------------- 
Track irql trace log                            
----------------------------------------------- 

Size of track irql queue is 0x80 

Thread:             FFFFFFFFFE4FA880
Old irql:           0
New irql:           2
Processor:          0
Time stamp:         5B97C

    FFFFFFFF80535D9E ntoskrnl!VerifierKfAcquireSpinLock+0x28
    FFFFFFFFFDB9ED56 +0xfffffffffdb9ed56
    FFFFFFFFFDB9F2CA +0xfffffffffdb9f2ca
    FFFFFFFF804175BD ntoskrnl!IopfCallDriver+0x31
    FFFFFFFFFDBEA69B +0xfffffffffdbea69b

Thread:             FFFFFFFFFE4FA880
Old irql:           2
New irql:           0
Processor:          0
Time stamp:         5B979

    FFFFFFFF80535E57 ntoskrnl!VerifierKfReleaseSpinLock+0x67
    FFFFFFFFFDB9EEED +0xfffffffffdb9eeed
    FFFFFFFFFDB9F2CA +0xfffffffffdb9f2ca
    FFFFFFFF804175BD ntoskrnl!IopfCallDriver+0x31
    FFFFFFFFFDBEA69B +0xfffffffffdbea69b

Thread:             FFFFFFFFFE4FA880
Old irql:           0
New irql:           2
Processor:          0
Time stamp:         5B979

    FFFFFFFF80535D9E ntoskrnl!VerifierKfAcquireSpinLock+0x28
    FFFFFFFFFDB9ED56 +0xfffffffffdb9ed56
    FFFFFFFFFDB9F2CA +0xfffffffffdb9f2ca
    FFFFFFFF804175BD ntoskrnl!IopfCallDriver+0x31
    FFFFFFFFFDBEA69B +0xfffffffffdbea69b

Thread:             FFFFFFFFFE4FA880
Old irql:           2
New irql:           0
Processor:          0
Time stamp:         5B974

    FFFFFFFF80535E57 ntoskrnl!VerifierKfReleaseSpinLock+0x67
    FFFFFFFFFDB9EEED +0xfffffffffdb9eeed
    FFFFFFFFFDB9F2CA +0xfffffffffdb9f2ca
    FFFFFFFF804175BD ntoskrnl!IopfCallDriver+0x31
    FFFFFFFFFDBEA69B +0xfffffffffdbea69b

下面是!verifier 扩展命令在Windows Vista计算机上打开了bit 7并且指定Address的示例。

0: kd> !verifier 80 a2b1cf20
Parsing 00004000 array entries, searching for address a2b1cf20.
=======================================
Pool block a2b1ce98, Size 00000168, Thread a2b1ce98
808f1be6 ndis!ndisFreeToNPagedPool+0x39
808f11c1 ndis!ndisPplFree+0x47
808f100f ndis!NdisFreeNetBufferList+0x3b
8088db41 NETIO!NetioFreeNetBufferAndNetBufferList+0xe
8c588d68 tcpip!UdpEndSendMessages+0xdf
8c588cb5 tcpip!UdpSendMessagesDatagramsComplete+0x22
8088d622 NETIO!NetioDereferenceNetBufferListChain+0xcf
8c5954ea tcpip!FlSendNetBufferListChainComplete+0x1c
809b2370 ndis!ndisMSendCompleteNetBufferListsInternal+0x67
808f1781 ndis!NdisFSendNetBufferListsComplete+0x1a
8c04c68e pacer!PcFilterSendNetBufferListsComplete+0xb2
809b230c ndis!NdisMSendNetBufferListsComplete+0x70
8ac4a8ba test1!HandleCompletedTxPacket+0xea
=======================================
Pool block a2b1ce98, Size 00000164, Thread a2b1ce98
822af87f nt!VerifierExAllocatePoolWithTagPriority+0x5d
808f1c88 ndis!ndisAllocateFromNPagedPool+0x1d
808f11f3 ndis!ndisPplAllocate+0x60
808f1257 ndis!NdisAllocateNetBufferList+0x26
80890933 NETIO!NetioAllocateAndReferenceNetBufferListNetBufferMdlAndData+0x14
8c5889c2 tcpip!UdpSendMessages+0x503
8c05c565 afd!AfdTLSendMessages+0x27
8c07a087 afd!AfdTLFastDgramSend+0x7d
8c079f82 afd!AfdFastDatagramSend+0x5ae
8c06f3ea afd!AfdFastIoDeviceControl+0x3c1
8217474f nt!IopXxxControlFile+0x268
821797a1 nt!NtDeviceIoControlFile+0x2a
8204d16a nt!KiFastCallEntry+0x127

附加信息

关于驱动程序验证器的信息,查看Windows Driver Kit (WDK)文档。

posted on 2008-08-11 13:23 NetRoc 阅读(815) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜