!handle

!handle 扩展显示目标系统中一个或所有进程拥有的一个或多个句柄的相关信息。

用户模式

!handle [Handle [UMFlags [TypeName]]] 
!handle -?

内核模式

!handle [Handle [KMFlags [Process [TypeName]]]] 

参数

Handle
指定要显示的句柄的索引。 如果 Handle 为 -1 或省略此参数,调试器将显示与当前进程关联的所有句柄的数据。 如果 Handle 为 0,调试器将显示所有句柄的数据。

UMFlags
(仅限用户模式)指定显示应包含的内容。 此参数可以是以下任何位值的总和。 (默认值为 0x1。)

位 0 (0x1)
显示句柄类型信息。

位 1 (0x2)
显示基本句柄信息。

位 2 (0x4)
显示句柄名称信息。

位 3 (0x8)
显示特定于对象的句柄信息(如果可用)。

KMFlags
(仅限内核模式)指定显示应包含的内容。 此参数可以是以下任何位值的总和。 (默认值为 0x3。)

位 0 (0x1)
显示基本句柄信息。

位 1 (0x2)
显示有关对象的信息。

位 2 (0x4)
显示可用句柄条目。 如果不设置此位,而省略 Handle 或将其设置为零,则显示的句柄列表不包括可用句柄。 如果 Handle 指定单个可用句柄,则即使未设置此位,也会显示该句柄。

位 4 (0x10)
显示内核句柄表中的句柄,而不是当前进程。

位 5 (0x20)
将句柄解释为线程 ID 或进程 ID,并显示有关相应内核对象的信息。

处理
(仅限内核模式)指定进程。 可以使用进程对象的进程 ID 或十六进制地址。 此参数必须引用目标系统上当前正在运行的进程。 如果此参数为 -1 或省略此参数,则使用当前进程。 如果此参数为 0,则显示来自所有进程的句柄信息。

TypeName
指定要检查的句柄的类型。 仅显示与此类型匹配的句柄。 TypeName 区分大小写。 有效类型包括事件、节、文件、端口、目录、SymbolicLink、 Mutant、WindowStation、Semaphore、密钥、令牌、进程、线程、桌面、IoCompletion、计时器、作业和 WaitablePort。

-?
(仅限用户模式)“调试器命令”窗口中显示此扩展的一些帮助文本。

DLL

Windows 2000

Kdextx86.dll Uext.dll Ntsdexts.dll

Windows XP 及更高版本

Kdexts.dll Uext.dll Ntsdexts.dll

其他信息

有关句柄的详细信息,请参阅 !htrace 扩展、Microsoft Windows SDK 文档以及 Mark Russinovich 和 David Solomon 的 Microsoft Windows Internals

注解

可以在用户模式和内核模式实时调试期间使用 !handle 扩展。 还可以在内核模式转储文件上使用此扩展。 但是,不能在用户模式转储文件上使用此扩展,除非你专门使用句柄信息创建了这些文件。 (还可以使用 .dump /mh(创建转储文件)命令创建此类转储文件。)

在实时用户模式调试期间,可以使用 .closehandle(关闭句柄)命令关闭一个或多个句柄。

以下示例是 !handle 扩展的用户模式示例。 以下命令显示所有句柄的列表。

0:000> !handle
Handle 4
  Type          Section
Handle 8
  Type          Event
Handle c
  Type          Event
Handle 10
  Type          Event
Handle 14
  Type          Directory
Handle 5c
  Type          File
6 Handles
Type            Count
Event           3
Section         1
File            1
Directory       1

以下命令显示有关句柄 0x8 的详细信息。

0:000> !handle 8 f
Handle 8
  Type          Event
  Attributes    0
  GrantedAccess 0x100003:
         Synch
         QueryState,ModifyState
  HandleCount   2
  PointerCount  3
  Name          <none>
  Object Specific Information
    Event Type Auto Reset
    Event is Waiting

以下示例是 !handle 的内核模式示例。 以下命令列出所有句柄,包括可用句柄。

kd> !handle 0 4
processor number 0
PROCESS 80559800  SessionId: 0  Cid: 0000    Peb: 00000000  ParentCid: 0000
    DirBase: 00039000  ObjectTable: e1000d60  TableSize: 380.
    Image: Idle

New version of handle table at e1002000 with 380 Entries in use

0000: free handle, Entry address e1002000, Next Entry fffffffe
0004: Object: 80ed5238  GrantedAccess: 001f0fff
0008: Object: 80ed46b8  GrantedAccess: 00000000
000c: Object: e1281d00  GrantedAccess: 000f003f
0010: Object: e1013658  GrantedAccess: 00000000
......
0168: Object: ffb6c748  GrantedAccess: 00000003 (Protected)
016c: Object: ff811f90  GrantedAccess: 0012008b
0170: free handle, Entry address e10022e0, Next Entry 00000458
0174: Object: 80dfd5c8  GrantedAccess: 001f01ff
......

以下命令显示内核句柄表中有关句柄 0x14 的详细信息。

kd> !handle 14 13
processor number 0
PROCESS 80559800  SessionId: 0  Cid: 0000    Peb: 00000000  ParentCid: 0000
    DirBase: 00039000  ObjectTable: e1000d60  TableSize: 380.
    Image: Idle

Kernel New version of handle table at e1002000 with 380 Entries in use
0014: Object: e12751d0  GrantedAccess: 0002001f
Object: e12751d0  Type: (80ec8db8) Key
    ObjectHeader: e12751b8
        HandleCount: 1  PointerCount: 1
        Directory Object: 00000000  Name: \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\CONTROL\SESSION MANAGER\EXECUTIVE

以下命令显示有关所有进程中 Section 对象的所有句柄的信息。

!handle 0 3 0 Section
...
PROCESS fffffa8004f48940
    SessionId: none  Cid: 0138    Peb: 7f6639bf000  ParentCid: 0004
    DirBase: 10cb74000  ObjectTable: fffff8a00066f700  HandleCount:  39.
    Image: smss.exe

Handle table at fffff8a00066f700 with 39 entries in use

0040: Object: fffff8a000633f00  GrantedAccess: 00000006 (Inherit) Entry: fffff8a000670100
Object: fffff8a000633f00  Type: (fffffa80035fef20) Section
    ObjectHeader: fffff8a000633ed0 (new version)
        HandleCount: 1  PointerCount: 262144
...