.process (Establecer contexto de proceso)
El comando .process especifica qué proceso se usa en el contexto del proceso.
.process [/i] [/p [/r]] [/P] [Process]
Parámetros
/Yo
Solo depuración en vivo; no durante la depuración del kernel local) Especifica que Process se va a depurar de forma invasiva. Este tipo de depuración significa que el sistema operativo del equipo de destino activa de verdad el proceso especificado. (Sin esta opción, el comando .process modifica la salida del depurador, pero no afecta al propio equipo de destino). Si usa /i, debe usar el comando g (Go) para ejecutar el destino. Después de varios segundos, el destino se interrumpe en el depurador y el Process especificado se activa y usa para el contexto del proceso.
/p
Traduce todas las entradas de la tabla de páginas de transición (PTE) de este proceso a direcciones físicas antes del acceso, si usa /p y el valor de Process no es cero. Esta traducción puede provocar ralentizaciones, ya que el depurador debe encontrar las direcciones físicas de toda la memoria que usa este proceso. Además, es posible que el depurador tenga que transferir una cantidad significativa de datos a través del cable de depuración. (El comportamiento es el mismo que el de .cache forcedecodeuser.)
Si incluye la opción /p y el valor de Process es cero o lo omite, la traducción se deshabilitará. (El comportamiento es el mismo que el de .cache noforcedecodeptes.)
/r
Si usa las opciones /r y /p, vuelve a cargar símbolos en modo de usuario después de establecer el contexto del proceso. (Este comportamiento es el mismo que .reload /user).
/P
(Solo para depuraciones en vivo y volcados de memoria completos) Si usa /P y el valor de Process no es cero, traduce todas las entradas de la tabla de páginas de transición (PTE) a direcciones físicas antes del acceso. A diferencia de la opción /p , la opción /P traduce las PTE para todos los procesos en modo de usuario y en modo kernel, no solo el proceso especificado. Esta traducción puede provocar ralentizaciones, ya que el depurador debe encontrar las direcciones físicas para toda la memoria en uso. Además, es posible que el depurador tenga que transferir una gran cantidad de datos a través del cable de depuración. (El comportamiento es el mismo que el de .cache forcedecodeptes.)
Proceso
Especifica la dirección del proceso deseada. (Concretamente, este parámetro especifica la dirección del bloque EPROCESS para este proceso). Se establece el contexto del proceso en este proceso. Si omite Process o especifica el valor cero, el contexto del proceso se restablece al proceso predeterminado para el estado actual del sistema. (Si usó la opción /i para establecer el contexto del proceso, debe usar la opción /i para restablecer el contexto del proceso).
Entorno
Elemento | Descripción |
---|---|
Modos | solo modo kernel |
Destinos | en tiempo real, volcado de memoria |
Platforms | all |
Información adicional
Para obtener más información sobre el contexto del proceso y otras configuraciones de contexto, consulte Cambiar contextos.
Comentarios
Por lo general, cuando se realiza la depuración del kernel, el único espacio de direcciones visible en modo de usuario es el asociado al proceso actual.
El comando .process indica al depurador de kernel que use un proceso concreto en modo de usuario como contexto del proceso. Este uso tiene varios efectos, pero lo más importante es que el depurador tiene acceso al espacio de direcciones virtuales de este proceso. El depurador usa las tablas de páginas de este proceso para interpretar todas las direcciones de memoria del modo de usuario, por lo que puede leer y escribir en esta memoria.
El comando .context (Establecer contexto de dirección en modo de usuario) tiene un efecto similar. Sin embargo, el comando .context establece el contexto de dirección en modo de usuario en un directorio de páginas específico, mientras que el comando .process establece el contexto del proceso en un proceso específico. En un procesador basado en x86, .context y .process tienen casi el mismo efecto. Sin embargo, en un procesador basado en Itanium, un único proceso podría tener más de un directorio de páginas. En este caso, el comando .process es más eficaz, ya que permite el acceso a todos los directorios de página asociados a un proceso. Para obtener más información sobre el contexto del proceso, lea Contexto del proceso.
Nota Si está realizando la depuración en vivo, debe usar el parámetro /i o /p . Sin uno de estos parámetros, no se puede mostrar correctamente el modo de usuario ni la memoria de sesión.
El parámetro /i activa el proceso de destino. Cuando use esta opción, debe ejecutar el destino una vez para que este comando surta efecto. Si se ejecuta de nuevo, se pierde el contexto del proceso.
El parámetro /p habilita la configuración forcedecodeuser. (No tiene que usar /p si la opción forcedecodeuser ya está activa). El contexto del proceso y el estado forcedecodeuser solo se mantienen hasta que el destino se ejecute de nuevo.
Si está realizando la depuración de volcado de memoria, las opciones /i y /p no están disponibles. No obstante, no puede acceder a ninguna parte del espacio de direcciones virtuales del proceso en modo de usuario que se paginaron en el disco cuando se produjo el bloqueo.
Si desea usar el depurador de kernel para establecer puntos de interrupción en el espacio de usuario, use la opción /i para cambiar el destino al contexto de proceso correcto.
En el ejemplo siguiente se muestra cómo usar la extensión !process para buscar la dirección del bloque EPROCESS para el proceso deseado.
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
Ahora, en el ejemplo se usa el comando .process con esta dirección de proceso.
kd> .process fe3c0d60
Implicit process is now fe3c0d60
Observe que este comando hace que el comando .context no sea necesario. El contexto de dirección del modo de usuario ya tiene el valor deseado.
kd> .context
User-mode page directory base is 11f000
Este valor le permite analizar el espacio de direcciones de varias maneras. Por ejemplo, en el ejemplo siguiente se muestra la salida de la extensión !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