(Contexte d’adresse en mode utilisateur) .context
La commande .context spécifie le répertoire de page d’un processus qui sera utilisé pour le contexte d’adresse en mode utilisateur ou affiche le contexte d’adresse en mode utilisateur actuel.
.context [PageDirectoryBase]
Paramètres
PageDirectoryBase
Spécifie l’adresse de base d’un répertoire de page d’un processus souhaité. Le contexte d’adresse en mode utilisateur est défini sur ce répertoire de page. Si PageDirectoryBase est égal à zéro, le contexte d’adresse en mode utilisateur est défini sur le répertoire de page pour l’état système actuel. Si PageDirectoryBase est omis, le contexte d’adresse en mode utilisateur actuel s’affiche.
Environnement
Élément | Description |
---|---|
Modes | mode noyau uniquement |
Targets | live, vidage de la mémoire |
Platforms | all |
Informations supplémentaires
Pour plus d’informations sur le contexte d’adresse en mode utilisateur et d’autres paramètres de contexte, consultez Modification des contextes.
Notes
En règle générale, lorsque vous effectuez un débogage du noyau, le seul espace d’adressage en mode utilisateur visible est celui associé au processus actuel.
La commande .context indique au débogueur du noyau d’utiliser le répertoire de page spécifié comme contexte d’adresse en mode utilisateur. Une fois cette commande exécutée, le débogueur aura accès à cet espace d’adressage virtuel. Les tables de pages de cet espace d’adressage sont utilisées pour interpréter toutes les adresses mémoire en mode utilisateur. Elles permettent de lire et d’écrire dans cette mémoire.
La commande .process (Définir le contexte du processus) a un effet similaire. Toutefois, la commande .context définit le contexte d’adresse en mode utilisateur sur un répertoire de page spécifique, tandis que la commande .process définit le contexte du processus sur un processus spécifique. Sur un processeur x86, ces deux commandes ont essentiellement le même effet. Pour plus d’informations, consultez Contexte de processus.
Si vous effectuez un débogage en direct, vous devez émettre une commande .cache forcedecodeuser en plus de la commande .context. Cela force le débogueur à rechercher les adresses physiques de l’espace mémoire nécessaire. (Ce processus peut être lent, car cela signifie souvent qu’une grande quantité de données doit être transférée sur le câble de débogage.)
Si vous effectuez un débogage de vidage sur incident, la commande .cache n’est pas nécessaire. Toutefois, vous n’aurez pas accès à des parties de l’espace d’adressage virtuel du processus en mode utilisateur qui ont été paginés sur le disque lorsque l’incident s’est produit.
Voici un exemple. Utilisez l’extension !process pour rechercher la base de répertoires du processus souhaité :
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
Utilisez maintenant la commande .context avec cette base de répertoires de pages.
kd> .context 0011f000
Cela vous permet d’examiner l’espace d’adressage de différentes façons. Par exemple, voici la sortie de l’extension !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