Partager via


.process (Set Process Context)

La commande .process spécifie le processus utilisé pour le contexte du processus.

.process [/i] [/p [/r]] [/P] [Process]

Paramètres

/i
Débogage en direct uniquement; pas pendant le débogage du noyau local) Spécifie que le processus doit être débogué de manière invasive. Ce type de débogage signifie que le système d'exploitation de l'ordinateur cible active véritablement le processus spécifié. (Sans cette option, la commande .process modifie la sortie du débogueur mais n'affecte pas l'ordinateur cible lui-même). Si vous utilisez /i, vous devez utiliser la commande g (Go) pour exécuter la cible. Après quelques secondes, la cible revient au débogueur et le processus spécifié est actif et utilisé pour le contexte du processus.

/p
Traduit toutes les entrées de table de pages de transition (PTE) de ce processus en adresses physiques avant l'accès, si vous utilisez /p et que Process est différent de zéro. Cette traduction peut entraîner des ralentissements, car le débogueur doit trouver les adresses physiques de toute la mémoire utilisée par ce processus. De plus, le débogueur peut avoir à transférer une quantité importante de données à travers le câble de débogage. (Ce comportement est identique à celui de .cache forcedecodeuser.)

Si vous incluez l'option /p et que Process est égal à zéro ou que vous l'omettez, la traduction est désactivée. (Ce comportement est identique à celui de .cache noforcedecodeptes).

/r
Recharge les symboles en mode utilisateur après que le contexte du processus a été défini, si vous utilisez les options /r et /p. (Ce comportement est identique à celui de .reload /user.)

/P
(Débogage en direct et vidages complets de la mémoire uniquement) Traduit toutes les entrées de table de pages de transition (PTE) en adresses physiques avant l'accès, si vous utilisez l'option /P et que Process est différent de zéro. Contrairement à l'option /p, l'option /P traduit les PTE pour tous les processus en mode utilisateur et en mode noyau, et pas seulement pour le processus spécifié. Cette traduction peut entraîner des ralentissements, car le débogueur doit trouver les adresses physiques de toute la mémoire utilisée. En outre, le débogueur peut être amené à transférer de nombreuses données sur le câble de débogage. (Ce comportement est identique à celui de .cache forcedecodeptes.)

Processus
Spécifie l'adresse du processus que vous souhaitez. (Plus précisément, ce paramètre spécifie l'adresse du bloc EPROCESS pour ce processus). Le contexte du processus est défini sur ce processus. Si vous omettez l'option Process ou si vous indiquez zéro, le contexte du processus est réinitialisé au processus par défaut pour l'état actuel du système. (Si vous avez utilisé l'option /i pour définir le contexte du processus, vous devez utiliser l'option /i pour réinitialiser le contexte du processus).

Environnement

Élément Description
Modes mode noyau uniquement
Targets live, vidage de la mémoire
Plateformes all

Informations supplémentaires

Pour plus d'informations sur le contexte de processus et d'autres paramètres de contexte, voir Changer de contexte.

Notes

En règle générale, lorsque vous déboguez le noyau, le seul espace d'adressage visible en mode utilisateur est celui qui est associé au processus en cours.

La commande .process indique au débogueur du noyau d'utiliser un processus spécifique en mode utilisateur comme contexte de processus. Cette utilisation a plusieurs effets, mais le plus important est que le débogueur a accès à l'espace d'adressage virtuel de ce processus. Le débogueur utilise les tables de pages de ce processus pour interpréter toutes les adresses de la mémoire en mode utilisateur, ce qui vous permet de lire et d'écrire dans cette mémoire.

La commande .context (Set User-Mode Address Context) a un effet similaire. Toutefois, la commande .context définit le contexte d'adresse en mode utilisateur à un répertoire de pages spécifique, tandis que la commande .process définit le contexte de processus à un processus spécifique. Sur un processeur x86, les commandes .context et .process ont pratiquement le même effet. Toutefois, sur un processeur Itanium, un seul processus peut avoir plus d'un répertoire de pages. Dans ce cas, la commande .process est plus puissante, car elle permet d'accéder à tous les répertoires de pages associés à un processus. Pour plus d'informations sur le contexte du processus, voir Contexte du processus.

Remarque Si vous effectuez un débogage en direct, vous devez utiliser les paramètres /i ou /p. Sans l'un de ces paramètres, vous ne pouvez pas afficher correctement le mode utilisateur ou la mémoire de session.

Le paramètre /i active le processus cible. Lorsque vous utilisez cette option, vous devez exécuter la cible une fois pour que cette commande prenne effet. Si vous l'exécutez à nouveau, le contexte du processus est perdu.

Le paramètre /p active le paramètre forcedecodeuser. (Vous ne devez pas utiliser /p si l'option forcedecodeuser est déjà active.) Le contexte du processus et l'état forcedecodeuser ne sont conservés que jusqu'à ce que la cible s'exécute à nouveau.

Si vous effectuez un débogage par vidage de mémoire, les options /i et /p ne sont pas disponibles. Cependant, vous ne pouvez accéder à aucune partie de l'espace d'adressage virtuel du processus en mode utilisateur qui a été paginée sur le disque lorsque le plantage s'est produit.

Si vous souhaitez utiliser le débogueur du noyau pour définir des points d'arrêt dans l'espace utilisateur, utilisez l'option /i pour basculer la cible dans le contexte du processus correct.

L'exemple suivant montre comment utiliser l'extension !process pour trouver l'adresse du bloc EPROCESS pour le 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

L'exemple utilise ensuite la commande .process avec cette adresse de processus.

kd> .process fe3c0d60
Implicit process is now fe3c0d60

Notez que cette commande rend la commande .context inutile. Le contexte d'adresse en mode utilisateur possède déjà la valeur souhaitée.

kd> .context 
User-mode page directory base is 11f000

Cette valeur vous permet d'examiner l'espace d'adressage de différentes manières. Par exemple, l'exemple suivant montre 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