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 是任何其他的值,即使设置了这些位中的一个或几个,也只允许使用Flags 和Image参数。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 选项相关的信息。如果指定了CompletionTime、 CancelTime、和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。CancelTime 为0时,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使用了任何其他值,即使设置了这些特殊位的一个或者多个,也只允许使用Flags 和Image参数。这种情况下,除了其他信息之外,!verifier还会显示激活的驱动程序验证器选项,以及内存池分配、IRQL提升、自旋锁和 trims 的统计。
如果Flags 等于0x20,驱动程序验证器的Driver Hang Verification选项将使用CompletionTime、CancelTime和ForceCancellation。这些新的值会立即生效并且持续到下一次启动。重新启动计算机时,它们会恢复到默认值。
同样,如果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)文档。