!процесс
Расширение !process отображает сведения о указанном процессе или обо всех процессах, включая блок EPROCESS.
Это расширение можно использовать только во время отладки в режиме ядра.
Синтаксис
!process [/s Session] [/m Module] [Process [Flags]]
!process [/s Session] [/m Module] 0 Flags ImageName
Параметры
Сеанс /s ****
Указывает сеанс, принадлежащий требуемому процессу.
Модуль /m ****
Указывает модуль, который владеет требуемым процессом.
Процесс
Указывает шестнадцатеричный адрес или идентификатор процесса процесса на целевом компьютере.
Значение процесса определяет, отображается ли расширение !process адрес или идентификатор процесса. Если процесс опущен в любой версии Windows, отладчик отображает данные только о текущем системном процессе. Если параметр Process is 0 и ImageName опущен, отладчик отображает сведения обо всех активных процессах. Если для сведений о текущем процессе отображается значение -1.
Flags
Указывает уровень детализации для отображения. Флаги могут быть любым сочетанием следующих битов. Если флаги равно 0, отображается только минимальное количество сведений. Значение по умолчанию зависит от версии Windows и значения Process. Значение по умолчанию 0x3, если процесс опущен или если процесс равен 0 или -1; в противном случае значение по умолчанию 0xF.
Bit 0 (0x1)
Отображает статистику времени и приоритета.
Бит 1 (0x2)
Отображает список потоков и событий, связанных с процессом, и их состояния ожидания.
Бит 2 (0x4)
Отображает список потоков, связанных с процессом. Если это включается без бита 1 (0x2), каждый поток отображается в одной строке. Если это включается вместе с битом 1, каждый поток отображается с трассировкой стека.
Бит 3 (0x8)
Отображает возвращаемый адрес и указатель стека для каждой функции. Отображение аргументов функции отключается.
Бит 4 (0x10)
Задает контекст процесса, равный указанному процессу в течение этой команды. Это приводит к более точному отображению стека потоков. Так как этот флаг эквивалентен использованию .process /p /r для указанного процесса, будет удален любой существующий список модулей пользовательского режима. Если процесс равен нулю, отладчик отображает все процессы и контекст процесса изменяется для каждого из них. Если вы отображаете только один процесс и его состояние пользовательского режима уже обновлено (например, с .process /p /r), не обязательно использовать этот флаг. Этот флаг действует только при использовании с битом 0 (0x1).
ImageName
Указывает имя отображаемого процесса. Отладчик отображает все процессы, имена исполняемых изображений которых соответствуют ImageName. Имя изображения должно совпадать с именем в блоке EPROCESS. Как правило, это исполняемое имя, которое было вызвано для запуска процесса, включая расширение файла (обычно .exe), и усечено после пятнадцатого символа. Невозможно указать имя изображения, содержащее пробел. При указании ImageName процесс должен быть равен нулю.
DLL-библиотеки
Kdexts.dll
Дополнительная информация
Сведения о процессах в режиме ядра см. в разделе "Изменение контекстов". Дополнительные сведения об анализе процессов и потоков см. в разделе "Внутренние компоненты Microsoft Windows", марк Руссинович и Дэвид Соломон.
Замечания
Ниже приведен пример отображения !process 0 0 :
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 80a02a60 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00006e05 ObjectTable: 80a03788 TableSize: 150.
Image: System
PROCESS 80986f40 Cid: 0012 Peb: 7ffde000 ParentCid: 0002
DirBase: 000bd605 ObjectTable: 8098fce8 TableSize: 38.
Image: smss.exe
PROCESS 80958020 Cid: 001a Peb: 7ffde000 ParentCid: 0012
DirBase: 0008b205 ObjectTable: 809782a8 TableSize: 150.
Image: csrss.exe
PROCESS 80955040 Cid: 0020 Peb: 7ffde000 ParentCid: 0012
DirBase: 00112005 ObjectTable: 80955ce8 TableSize: 54.
Image: winlogon.exe
PROCESS 8094fce0 Cid: 0026 Peb: 7ffde000 ParentCid: 0020
DirBase: 00055005 ObjectTable: 80950cc8 TableSize: 222.
Image: services.exe
PROCESS 8094c020 Cid: 0029 Peb: 7ffde000 ParentCid: 0020
DirBase: 000c4605 ObjectTable: 80990fe8 TableSize: 110.
Image: lsass.exe
PROCESS 809258e0 Cid: 0044 Peb: 7ffde000 ParentCid: 0026
DirBase: 001e5405 ObjectTable: 80925c68 TableSize: 70.
Image: SPOOLSS.EXE
В следующей таблице описаны некоторые элементы выходных данных !process 0 0 .
Элемент | Значение |
---|---|
Адрес процесса |
Шестнадцатеричное число восьми символов после слова PROCESS — адрес блока EPROCESS. В последнем примере в предыдущем примере адрес процесса 0x809258E0. |
Идентификатор процесса (PID) |
Шестнадцатеричное число после слова Cid. В последнем примере в предыдущем примере идентификатор пин-кода 0x44 или десятичное значение 68. |
Блок среды обработки (PEB) |
Шестнадцатеричное число после слова Peb — адрес блока среды процесса. В заключительной записи в предыдущем примере PEB находится по адресу 0x7FFDE000. |
Родительский процесс PID |
Шестнадцатеричное число после слова ParentCid является идентификатором идентификатора родительского процесса. В последнем примере в предыдущем примере родительский процесс PID 0x26 или десятичное значение 38. |
Изображения |
Имя модуля, которому принадлежит процесс. В последнем примере в предыдущем примере владелец spoolss.exe. В первой записи владелец является самой операционной системой. |
Адрес объекта процесса |
Шестнадцатеричное число после слова ObjectTable. В последнем примере в предыдущем примере адрес объекта процесса 0x80925c68. |
Чтобы отобразить полные сведения об одном процессе, задайте для флагов значение 7. Сам процесс можно указать, установив "Процесс " равным адресу процесса, параметру Process равно идентификатору процесса или параметру ImageName равным имени исполняемого образа. Рассмотрим пример:
kd> !process fb667a00 7
PROCESS fb667a00 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: e1000f88 TableSize: 112.
Image: System
VadRoot fb666388 Clone 0 Private 4. Modified 9850. Locked 0.
FB667BBC MutantState Signalled OwningThread 0
Token e10008f0
ElapsedTime 15:06:36.0338
UserTime 0:00:00.0000
KernelTime 0:00:54.0818
QuotaPoolUsage[PagedPool] 1480
Working Set Sizes (now,min,max) (3, 50, 345)
PeakWorkingSetSize 118
VirtualSize 1 Mb
PeakVirtualSize 1 Mb
PageFaultCount 992
MemoryPriority BACKGROUND
BasePriority 8
CommitCharge 8
THREAD fb667780 Cid 2.1 Teb: 00000000 Win32Thread: 80144900 WAIT: (WrFreePage) KernelMode Non-Alertable
80144fc0 SynchronizationEvent
Not impersonating
Owning Process fb667a00
WaitTime (seconds) 32278
Context Switch Count 787
UserTime 0:00:00.0000
KernelTime 0:00:21.0821
Start Address Phase1Initialization (0x801aab44)
Initial Sp fb26f000 Current Sp fb26ed00
Priority 0 BasePriority 0 PriorityDecrement 0 DecrementCount 0
ChildEBP RetAddr Args to Child
fb26ed18 80118efc c0502000 804044b0 00000000 KiSwapThread+0xb5
fb26ed3c 801289d9 80144fc0 00000008 00000000 KeWaitForSingleObject+0x1c2
Обратите внимание, что адрес объекта процесса можно использовать в качестве входных данных для других расширений, таких как !handle, для получения дополнительных сведений.
В следующей таблице описаны некоторые элементы в предыдущем примере.
Элемент | Значение |
---|---|
ЖДАТЬ | Скобка после этого заголовка дает причину ожидания. Команда dt nt!_KWAIT_REASON отобразит список всех причин ожидания. |
ElapsedTime |
Выводит список времени, истекшего с момента создания процесса. Это отображается в единицах часов:Minutes:Seconds.Milliseconds. |
UserTime |
Выводит список времени выполнения процесса в пользовательском режиме. Если значение UserTime является исключительно высоким, он может определить процесс, который истощает системные ресурсы. Единицы совпадают с единицами elapsedTime. |
KernelTime |
Выводит список времени выполнения процесса в режиме ядра. Если значение для KernelTime является исключительно высоким, он может определить процесс, который истощает системные ресурсы. Единицы совпадают с единицами elapsedTime. |
Размеры рабочих наборов |
Перечисляет текущий, минимальный и максимальный размер рабочего набора для процесса на страницах. Исключительно большой размер рабочего набора может быть признаком процесса утечки памяти или истощения системных ресурсов. |
Записи QuotaPoolUsage |
Выводит список страничного и непагированного пула, используемого процессом. В системе с утечкой памяти поиск чрезмерного использования непагрегированного пула во всех процессах можно определить, какой процесс имеет утечку памяти. |
Клонировать |
Указывает, был ли процесс создан подсистемами POSIX или Interix. |
Private |
Указывает количество частных (не совместно используемых) страниц, используемых в данный момент процессом. Это включает в себя как страницы, так и выстраивает память. |
Помимо сведений о списке процессов, сведения о потоке содержат список ресурсов, на которых блокируются потоки. Эти сведения перечислены в третьей строке выходных данных после заголовка потока. В этом примере поток имеет блокировку для одного ресурса, синхронизацииEvent с адресом 80144fc0. Сравнивая этот адрес со списком блокировок, отображаемых расширением !kdext*.locks , можно определить, какие потоки имеют монопольные блокировки для ресурсов.
Расширение !stacks содержит краткую сводку о состоянии каждого потока. Это можно использовать вместо расширения !process, чтобы получить краткий обзор системы, особенно при отладке многопоточных проблем, таких как конфликты ресурсов или взаимоблокировки.