.context (Establecer contexto de dirección en modo de usuario)

El comando .context especifica qué directorio de páginas de un proceso se usará para el contexto de dirección en modo de usuario o muestra el contexto de dirección del modo de usuario actual.

.context [PageDirectoryBase]

Parámetros

PageDirectoryBase
Especifica la dirección base de un directorio de páginas de un proceso deseado. El contexto de dirección en modo de usuario se establecerá en este directorio de páginas. Si PageDirectoryBase es cero, el contexto de dirección en modo de usuario se establecerá en el directorio de páginas para el estado actual del sistema. Si se omite PageDirectoryBase, se muestra el contexto de dirección en modo de usuario actual.

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 de dirección en modo de usuario y otras configuraciones de contexto, consulte Cambio de 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 .context indica al depurador de kernel que use el directorio de páginas especificado como contexto de dirección en modo de usuario. Una vez ejecutado este comando, el depurador tendrá acceso a este espacio de direcciones virtual. Se usarán las tablas de páginas de este espacio de direcciones para interpretar todas las direcciones de memoria en modo de usuario. Esto le permite leer y escribir en esta memoria.

El comando .process (Establecer contexto de proceso) 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 x86, estos dos comandos tienen esencialmente el mismo efecto. Consulte Contexto de proceso para obtener más detalles.

Si está realizando la depuración en tiempo real, debe emitir un comando .cache forcedecodeuser además del comando .context. Esto obliga al depurador a buscar las direcciones físicas del espacio de memoria necesario. (Esto puede ser lento, ya que a menudo significa que se debe transferir una gran cantidad de datos a través del cable de depuración).

Si va a depurar el volcado de memoria, no es necesario el comando .cache. Sin embargo, no tendrá acceso a ninguna parte del espacio de direcciones virtual del proceso en modo de usuario que se paginaron en el disco cuando se produjo el bloqueo.

A continuación se muestra un ejemplo: Use la extensión !process para buscar la base de directorios 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 use el comando .context con esta base del directorio de páginas.

kd> .context 0011f000

Esto le permite analizar el espacio de direcciones de varias maneras. Por ejemplo, esta es 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