Partager via


(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