.context (Adresskontext im Benutzermodus einstellen)

Der Befehl .context gibt an, welches Seitenverzeichnis eines Prozesses für den Adresskontext des Benutzermodus verwendet werden soll, oder zeigt den aktuellen Adresskontext des Benutzermodus an.

.context [PageDirectoryBase]

Parameter

PageDirectoryBase
Gibt die Basisadresse für ein Seitenverzeichnis eines gewünschten Prozesses an. Der Adresskontext im Benutzermodus wird auf dieses Seitenverzeichnis eingestellt. Wenn PageDirectoryBase gleich Null ist, wird der Adresskontext im Benutzermodus auf das Seitenverzeichnis für den aktuellen Systemzustand gesetzt. Wenn PageDirectoryBase weggelassen wird, wird der aktuelle Adresskontext des Benutzermodus angezeigt.

Environment

Element Beschreibung
Modi Nur Kernelmodus
Ziele Live, Crash Dump
Plattformen Alle

Zusätzliche Informationen

Weitere Informationen über den Adresskontext im Benutzermodus und andere Kontexteinstellungen finden Sie unter Ändern von Kontexten.

Hinweise

Wenn Sie Kernel-Debugging betreiben, ist der einzige sichtbare Adressraum im Benutzermodus derjenige, der mit dem aktuellen Prozess verbunden ist.

Der Befehl .context weist den Kernel-Debugger an, das angegebene Seitenverzeichnis als Adresskontext für den Benutzermodus zu verwenden. Nachdem dieser Befehl ausgeführt wurde, hat der Debugger Zugriff auf diesen virtuellen Adressraum. Die Seitentabellen für diesen Adressraum werden verwendet, um alle Speicheradressen im Benutzermodus zu interpretieren. Damit können Sie diesen Speicher lesen und beschreiben.

Der Befehl .process (Set Process Context) hat eine ähnliche Wirkung. Der Befehl .context setzt jedoch den Adresskontext im Benutzermodus auf ein bestimmtes Seitenverzeichnis, während der Befehl .process den Prozesskontext auf einen bestimmten Prozess setzt. Auf einem x86-Prozessor haben diese beiden Befehle im Wesentlichen die gleiche Wirkung. Siehe Prozesskontext für weitere Details.

Wenn Sie Live-Debugging durchführen, sollten Sie den Befehl .cache forcedecodeuser zusätzlich zum Befehl .context ausführen. Dadurch wird der Debugger gezwungen, die physischen Adressen des benötigten Speicherplatzes zu suchen. (Dies kann langsam sein, da oft eine große Datenmenge über das Debug-Kabel übertragen werden muss)

Wenn Sie einen Crash-Dump debuggen, ist der Befehl .cache nicht erforderlich. Sie haben jedoch keinen Zugriff auf Teile des virtuellen Adressraums des Benutzermodusprozesses, die zum Zeitpunkt des Absturzes auf die Festplatte ausgelagert wurden.

Beispiel: Verwenden Sie die Erweiterung !process, um die Verzeichnisbasis für den gewünschten Prozess zu finden:

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

Verwenden Sie nun den Befehl .context mit dieser Seitenverzeichnisbasis.

kd> .context 0011f000

So können Sie den Adressraum auf verschiedene Arten untersuchen. Hier ist zum Beispiel die Ausgabe der Erweiterung !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