Share via


.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

/i
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.)

Process
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
Plataformas 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