Compartilhar via


.context (Definir contexto de endereço no modo de usuário)

O comando .context especifica o diretório de página de um processo que será usado para o contexto de endereço de modo de usuário, ou exibe o contexto de endereço de modo de usuário atual.

.context [PageDirectoryBase]

Parâmetros

PageDirectoryBase
Especifica o endereço base de um diretório de página de um processo desejado. O contexto de endereço no modo de usuário será definido para este diretório de página. Se PageDirectoryBase for zero, o contexto de endereço no modo de usuário será definido como o diretório de página para o estado atual do sistema. Se PageDirectoryBase for omitido, o contexto de endereço no modo de usuário atual será exibido.

Ambiente

Item Descrição
Modos apenas no modo kernel
Destinos ao vivo, despejo de falhas
Plataformas all

Informações Adicionais

Para saber mais sobre o endereço do modo de usuário e outras configurações de contexto, confira Alterar contextos.

Comentários

Em geral, quando você faz a depuração do kernel, o único espaço visível de endereço no modo de usuário está associado ao processo atual.

O comando .context instrui o depurador do kernel a usar o diretório de página especificado como o contexto de endereço no modo de usuário. Após a execução desse comando, o depurador terá acesso a esse espaço de endereço virtual. As tabelas de página para esse espaço de endereço serão usadas para interpretar todos os endereços de memória no modo de usuário. Isso permite ler e gravar nessa memória.

O comando .process (Definir contexto do processo) tem um efeito similar. Mas, o comando .context define o contexto de endereço no modo de usuário de um diretório de página específico, enquanto o comando .process define o contexto do processo de um processo específico. Em um processador x86, esses dois comandos têm essencialmente o mesmo efeito. Para obter mais detalhes, confira Contexto do processo.

Em caso de depuração ao vivo, você deve emitir um comando .cache forcedecodeuser além do comando .context. Isso força o depurador a pesquisar os endereços físicos do espaço de memória necessário. (Isso pode ser lento porque, em geral, significa que um grande volume de dados deve ser transferido pelo cabo de depuração.)

Em caso de depuração de despejo de falha, o comando .cache não é necessário. Mas, você não terá acesso às partes do espaço de endereço virtual do processo de modo de usuário que foram paginadas no disco quando ocorreu a falha.

Veja um exemplo. Use a extensão !process para localizar a base de diretório do processo desejado:

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

Agora use o comando .context com esta base de diretório de página.

kd> .context 0011f000

Isso permite examinar o espaço de endereço de várias formas. Por exemplo, aqui está a saída da extensão !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