!ручка
Расширение !handle отображает сведения об дескрипторе или дескрипторе , который принадлежит одной или всем процессам в целевой системе.
Режим пользователя
!handle [Handle [UMFlags [TypeName]]]
!handle -?
Режим ядра
!handle [Handle [KMFlags [Process [TypeName]]]]
Параметры
Ручка
Задает индекс отображаемого дескриптора. Если дескриптор равен -1 или если этот параметр опущен, отладчик отображает данные для всех дескрипторов , связанных с текущим процессом. Если дескриптор равен 0, отладчик отображает данные для всех дескрипторов.
UMFlags
(Только в пользовательском режиме) Указывает, что должен содержать дисплей. Этот параметр может быть суммой любого из следующих битовых значений. (Значение по умолчанию — 0x1.)
Bit 0 (0x1)
Отображает сведения о типе дескриптора.
Бит 1 (0x2)
Отображает основные сведения об дескрипторе.
Бит 2 (0x4)
Отображает сведения об имени дескриптора.
Бит 3 (0x8)
Отображает сведения об дескрипторе для конкретного объекта при наличии.
KMFlags
(только режим ядра) Указывает, что должен содержать дисплей. Этот параметр может быть суммой любого из следующих битовых значений. (Значение по умолчанию — 0x3.)
Bit 0 (0x1)
Отображает основные сведения об дескрипторе.
Бит 1 (0x2)
Отображает сведения о объектах.
Бит 2 (0x4)
Отображает записи бесплатного дескриптора. Если этот бит не задан и не задан дескриптор или задано значение нулю, список отображаемых дескрипторов не включает бесплатные дескрипторы. Если Дескриптор задает один бесплатный дескриптор, он отображается даже в том случае, если этот бит не задан.
Бит 4 (0x10)
Отображает дескриптор из таблицы обработчика ядра вместо текущего процесса.
Бит 5 (0x20)
Интерпретирует дескриптор как идентификатор потока или идентификатор процесса и отображает сведения о соответствующем объекте ядра.
Процесс
(только режим ядра) Задает процесс. Вы можете использовать идентификатор процесса или шестнадцатеричный адрес объекта процесса. Этот параметр должен ссылаться на текущий запущенный процесс в целевой системе. Если этот параметр равен -1 или если он не указан, используется текущий процесс. Если этот параметр равен 0, отображается информация обо всех процессах.
TypeName
Указывает тип дескриптора, который требуется проверить. Отображаются только дескрипторы, соответствующие этому типу. TypeName учитывает регистр. Допустимые типы: Event, Section, File, Port, Directory, SymbolicLink, Mutant, WindowStation, Semaphore, Key, Token, Process, Thread, Desktop, IoCompletion, Timer, Job и WaitablePort.
-?
(Только в пользовательском режиме) Отображает текст справки для этого расширения в окне команды отладчика.
DLL-библиотеки
Windows 2000 |
Kdextx86.dll Uext.dll Ntsdexts.dll |
Windows XP и более поздние версии |
Kdexts.dll Uext.dll Ntsdexts.dll |
Дополнительная информация
Дополнительные сведения об дескрипторах см. в расширении !htrace, документации по пакету SDK Для Microsoft Windows и внутренним службам Microsoft Windows марком Руссиновичем и Дэвидом Соломоном.
Замечания
Расширение !handle можно использовать во время динамической отладки в режиме пользователя и в режиме ядра. Это расширение также можно использовать в файлах дампа в режиме ядра. Однако вы не можете использовать это расширение в файлах дампа в пользовательском режиме, если только вы не создали их с информацией об дескрипторе. (Такие файлы дампа можно создать с помощью
Во время динамической отладки в режиме пользователя можно использовать команду closehandle (Close Handle) для закрытия одного или нескольких дескрипторов.
Ниже приведены примеры пользовательского режима расширения !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
...