.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
/Je
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 |
Platforms | 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