.process (задать контекст процесса)

Команда .process указывает, какой процесс используется для контекста процесса.

.process [/i] [/p [/r]] [/P] [Process]

Параметры

/i
Только динамическая отладка; не во время локальной отладки ядра) Указывает, что процесс должен быть отлаживаем инвазивно. Такой вид отладки означает, что операционная система целевого компьютера фактически делает указанный процесс активным. (Без этого параметра команда .process изменяет выходные данные отладчика, но не влияет на сам целевой компьютер.) При использовании /i необходимо использовать команду g (Go) для выполнения целевого объекта. Через несколько секунд целевой объект прерывается обратно в отладчик, а указанный процесс активен и используется для контекста процесса.

/p
Преобразует все записи таблицы страниц перехода (PTEs) для этого процесса на физические адреса перед доступом, если вы используете /p и Process является ненулевой. Этот перевод может привести к замедлению, так как отладчик должен найти физические адреса для всей памяти, используемой этим процессом. Кроме того, отладчику может потребоваться передать значительный объем данных по отладочному кабелю. (Это поведение совпадает с . cache forcedecodeuser.)

Если включен параметр /p и процесс равен нулю или не указан, перевод отключен. (Это поведение совпадает с . cache noforcedecodeptes.)

/R
Перезагружает символы пользовательского режима после установки контекста процесса, если вы используете параметры /r и /p . (Это поведение совпадает с . перезагрузить /user.)

/P
(Только динамические отладочные и полные дампы памяти) Преобразует все записи таблицы страниц перехода (PTEs) на физические адреса перед доступом, если вы используете /P и Process является ненулевой. В отличие от параметра /p, параметр /P преобразует PTEs для всех процессов пользовательского режима и режима ядра, а не только для указанного процесса. Этот перевод может привести к замедлению, так как отладчик должен найти физические адреса для всей используемой памяти. Кроме того, отладчику может потребоваться передать большое количество данных по отладочному кабелю. (Это поведение совпадает с . cache forcedecodeptes.)

Обработать
Указывает адрес нужного процесса. (Точнее, этот параметр задает адрес блока EPROCESS для этого процесса. Контекст процесса задан для этого процесса. Если опустить процесс или указать ноль, контекст процесса сбрасывается в процесс по умолчанию для текущего состояния системы. (Если вы использовали параметр /i для задания контекста процесса, необходимо использовать параметр /i для сброса контекста процесса.)

Среда

Позиция Description
Режимы Только режим ядра
Целевые объекты live, аварийное дампа
Платформы all

Дополнительная информация

Дополнительные сведения о контексте процесса и других параметрах контекста см. в разделе "Изменение контекстов".

Замечания

Как правило, при отладке ядра единственным видимым адресным пространством в режиме пользователя является тот, который связан с текущим процессом.

Команда .process указывает отладчику ядра использовать определенный процесс пользовательского режима в качестве контекста процесса. Это использование имеет несколько эффектов, но самое важное заключается в том, что отладчик имеет доступ к виртуальному адресном пространству этого процесса. Отладчик использует таблицы страниц для этого процесса для интерпретации всех адресов памяти в пользовательском режиме, чтобы можно было читать и записывать в эту память.

Команда .context (Set User-Mode Address Context) имеет аналогичный эффект. Однако команда .context задает контекст адреса в пользовательском режиме для определенного каталога страницы, а команда .process задает контекст процесса определенному процессу. На процессоре на основе x86 контекст и процесс .имеют почти тот же эффект. Однако на процессоре на основе Itanium один процесс может иметь несколько каталогов страниц. В этой ситуации команда .process является более мощной, так как она обеспечивает доступ ко всем каталогам страниц, связанным с процессом. Дополнительные сведения о контексте процесса см. в разделе "Контекст процесса".

Обратите внимание , что при выполнении динамической отладки следует использовать параметр /i или /p . Без одного из этих параметров невозможно правильно отображать память пользователя или сеанса.

Параметр /i активирует целевой процесс. При использовании этого параметра необходимо выполнить целевой объект один раз, чтобы эта команда ввела в силу. При повторном выполнении контекст процесса теряется.

Параметр /p включает параметр принудительного кода. (Если параметр принудительного кодаuser уже активен, не нужно использовать /p.) Контекст процесса и состояние принудительного кодаuser остаются только до тех пор, пока целевой объект не будет выполнен снова.

Если выполняется отладка аварийного дампа, параметры /i и /p недоступны. Однако вы не можете получить доступ к любой части виртуального адресного пространства процесса в пользовательском режиме, которые были страницы на диск при сбое.

Если вы хотите использовать отладчик ядра для задания точек останова в пользовательском пространстве, используйте параметр /i , чтобы переключить целевой объект в правильный контекст процесса.

В следующем примере показано, как использовать расширение !process для поиска адреса блока EPROCESS для требуемого процесса.

kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0  SessionId: 0  Cid: 0008    Peb: 00000000  ParentCid: 0000
    DirBase: 00030000  ObjectTable: fe529b68  TableSize:  50.
    Image: System

.....

PROCESS fe3c0d60  SessionId: 0  Cid: 0208    Peb: 7ffdf000  ParentCid: 00d4
    DirBase: 0011f000  ObjectTable: fe3d0f48  TableSize:  30.
    Image: regsvc.exe

Теперь в примере используется команда .process с этим адресом процесса.

kd> .process fe3c0d60
Implicit process is now fe3c0d60

Обратите внимание, что эта команда делает команду контекста ненужной. Контекст адреса в пользовательском режиме уже имеет требуемое значение.

kd> .context 
User-mode page directory base is 11f000

Это значение позволяет анализировать адресное пространство различными способами. Например, в следующем примере показаны выходные данные расширения !peb .

kd> !peb
PEB at 7FFDF000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No
    ImageBaseAddress:         01000000
    Ldr.Initialized: Yes
    Ldr.InInitializationOrderModuleList: 71f40 . 77f68
    Ldr.InLoadOrderModuleList: 71ec0 . 77f58
    Ldr.InMemoryOrderModuleList: 71ec8 . 77f60
        01000000 C:\WINNT\system32\regsvc.exe
        77F80000 C:\WINNT\System32\ntdll.dll
        77DB0000 C:\WINNT\system32\ADVAPI32.dll
        77E80000 C:\WINNT\system32\KERNEL32.DLL
        77D40000 C:\WINNT\system32\RPCRT4.DLL
        77BE0000 C:\WINNT\system32\secur32.dll
    SubSystemData:     0
    ProcessHeap:       70000
    ProcessParameters: 20000
        WindowTitle: "'C:\WINNT\system32\regsvc.exe'"
        ImageFile:    'C:\WINNT\system32\regsvc.exe'
        CommandLine:  'C:\WINNT\system32\regsvc.exe'
        DllPath:     'C:\WINNT\system32;.;C:\WINNT\System32;C:\WINNT\system;C:\WINNT;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\PROGRA~1\COMMON~1\AUTODE~1'
        Environment:  0x10000