Condividi tramite


.context (Imposta contesto indirizzo in modalità utente)

Il comando .context specifica la directory di pagina di un processo che verrà usata per il contesto dell'indirizzo in modalità utente o visualizza il contesto dell'indirizzo in modalità utente corrente.

.context [PageDirectoryBase]

Parametri

PageDirectoryBase
Specifica l'indirizzo di base per una directory di pagine di un processo desiderato. Il contesto dell'indirizzo in modalità utente verrà impostato su questa directory della pagina. Se PageDirectoryBase è zero, il contesto dell'indirizzo in modalità utente verrà impostato sulla directory della pagina per lo stato corrente del sistema. Se PageDirectoryBase viene omesso, viene visualizzato il contesto dell'indirizzo in modalità utente corrente.

Ambiente

Articolo Descrizione
Modalità Solo modalità kernel
Target live, dump di arresto anomalo
Piattaforme tutto

Informazioni aggiuntive

Per altre informazioni sul contesto dell'indirizzo in modalità utente e altre impostazioni di contesto, vedere Modifica dei contesti.

Osservazioni:

In genere, quando si esegue il debug del kernel, l'unico spazio indirizzi in modalità utente visibile è quello associato al processo corrente.

Il comando .context indica al debugger del kernel di usare la directory di pagina specificata come contesto di indirizzo in modalità utente. Dopo l'esecuzione di questo comando, il debugger avrà accesso a questo spazio indirizzi virtuale. Le tabelle di pagina per questo spazio indirizzi verranno usate per interpretare tutti gli indirizzi di memoria in modalità utente. In questo modo è possibile leggere e scrivere in questa memoria.

Il comando .process (Set Process Context) ha un effetto simile. Tuttavia, il comando .context imposta il contesto dell'indirizzo in modalità utente su una directory di pagina specifica, mentre il comando .process imposta il contesto del processo su un processo specifico. In un processore x86, questi due comandi hanno essenzialmente lo stesso effetto. Per altri dettagli, vedere Contesto del processo.

Se si esegue il debug in tempo reale, è necessario eseguire un comando .cache forcedecodeuser oltre al comando .context. In questo modo il debugger cerca gli indirizzi fisici dello spazio di memoria necessario. Questo può essere lento, perché spesso significa che una grande quantità di dati deve essere trasferita attraverso il cavo di debug.

Se si esegue il debug del dump di arresto anomalo del sistema, il comando .cache non è necessario. Tuttavia, non si avrà accesso ad alcuna parte dello spazio degli indirizzi virtuali del processo in modalità utente che sono stati inseriti su disco quando si è verificato l'arresto anomalo del sistema.

Ecco un esempio. Usare l'estensione !process per trovare la base di directory per il processo desiderato:

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

Usare ora il comando .context con questa directory di pagina.

kd> .context 0011f000

In questo modo è possibile esaminare lo spazio indirizzi in diversi modi. Ecco ad esempio l'output dell'estensione !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