!process
L'extension !process affiche des informations sur le processus spécifié ou sur tous les processus, y compris le bloc EPROCESS.
Cette extension peut être utilisée uniquement lors du débogage en mode noyau.
Syntaxe
!process [/s Session] [/m Module] [Process [Flags]]
!process [/s Session] [/m Module] 0 Flags ImageName
Paramètres
/s **** Session
Spécifie la session qui possède le processus souhaité.
/m **** Module
Spécifie le module qui possède le processus désiré.
Processus
Spécifie l'adresse hexadécimale ou l'ID du processus sur l'ordinateur cible.
La valeur de Process détermine si l'extension !process affiche l'adresse ou l'ID du processus. Si Process est omis dans n'importe quelle version de Windows, le débogueur n'affiche que les données relatives au processus système en cours. Si Process vaut 0 et que ImageName est omis, le débogueur affiche des informations sur tous les processus actifs. Si -1 est spécifié pour Process, des informations sur le processus en cours sont affichées.
Indicateurs
Spécifie le niveau de détails à afficher. Flags peut être n’importe quelle combinaison des bits suivants. Si Flags a la valeur 0, seule une quantité minimale d’informations est affichée. La valeur par défaut varie en fonction de la version de Windows et de la valeur de Process. La valeur par défaut est 0x3 si Process est omis ou si Process est 0 ou -1 ; sinon, la valeur par défaut est 0xF.
Bit 0 (0x1)
Affiche les statistiques de temps et de priorité.
Bit 1 (0x2)
Affiche une liste de threads et d'événements associés au processus, ainsi que leurs états d'attente.
Bit 2 (0x4)
Affiche la liste des threads associés au processus. Si cette option est incluse sans le bit 1 (0x2), chaque threading est affiché sur une seule ligne. S'il est inclus avec le bit 1, chaque threading est affiché avec une trace de pile.
Bit 3 (0x8)
Affiche l'adresse de retour et le pointeur de pile pour chaque fonction L'affichage des arguments de fonction est supprimé.
Bit 4 (0x10)
Définit le contexte du processus comme étant le processus spécifié pour la durée de cette commande. Il en résulte un affichage plus précis des piles de threading. Comme cet indicateur équivaut à l'utilisation de .process /p /r pour le processus spécifié, toute liste de modules en mode utilisateur sera supprimée. Si Process vaut zéro, le débogueur affiche tous les processus et le contexte du processus est modifié pour chacun d'entre eux. Si vous n'affichez qu'un seul processus et que son état en mode utilisateur a déjà été actualisé (par exemple, avec .process /p /r), il n'est pas nécessaire d'utiliser cet indicateur. Cet indicateur n'est efficace que lorsqu'il est utilisé avec le bit 0 (0x1).
ImageName
Spécifie le nom du processus à afficher. Le débogueur affiche tous les processus dont les noms d'images exécutables correspondent à ImageName. Le nom de l’image doit correspondre à celui du bloc EPROCESS. En général, il s’agit du nom exécutable qui a été invoqué pour démarrer le processus, y compris l’extension de fichier (généralement .exe), et tronqué après le quinzième caractère. Il est impossible de spécifier un nom d’image contenant un espace. Lorsque ImageName est spécifié, Process doit être égal à zéro.
DLL
Kdexts.dll
Informations supplémentaires
Pour plus d'informations sur les processus en mode noyau, reportez-vous à la section Changement de contexte. Pour plus d’informations sur l’analyse des processus et des threads, veuillez consulter Microsoft Windows Internals (Au cœur de Windows) de Mark Russinovich et David Solomon.
Notes
Voici un exemple d'affichage de !process 0 0 :
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 80a02a60 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00006e05 ObjectTable: 80a03788 TableSize: 150.
Image: System
PROCESS 80986f40 Cid: 0012 Peb: 7ffde000 ParentCid: 0002
DirBase: 000bd605 ObjectTable: 8098fce8 TableSize: 38.
Image: smss.exe
PROCESS 80958020 Cid: 001a Peb: 7ffde000 ParentCid: 0012
DirBase: 0008b205 ObjectTable: 809782a8 TableSize: 150.
Image: csrss.exe
PROCESS 80955040 Cid: 0020 Peb: 7ffde000 ParentCid: 0012
DirBase: 00112005 ObjectTable: 80955ce8 TableSize: 54.
Image: winlogon.exe
PROCESS 8094fce0 Cid: 0026 Peb: 7ffde000 ParentCid: 0020
DirBase: 00055005 ObjectTable: 80950cc8 TableSize: 222.
Image: services.exe
PROCESS 8094c020 Cid: 0029 Peb: 7ffde000 ParentCid: 0020
DirBase: 000c4605 ObjectTable: 80990fe8 TableSize: 110.
Image: lsass.exe
PROCESS 809258e0 Cid: 0044 Peb: 7ffde000 ParentCid: 0026
DirBase: 001e5405 ObjectTable: 80925c68 TableSize: 70.
Image: SPOOLSS.EXE
Le tableau suivant décrit certains éléments de la sortie !process 0 0.
Element | Signification |
---|---|
Adresse du processus |
Le nombre hexadécimal de huit caractères qui suit le mot PROCESS est l'adresse du bloc EPROCESS. Dans la dernière entrée de l'exemple précédent, l'adresse du processus est 0x809258E0. |
ID du processus (PID) |
Le nombre hexadécimal après le mot Cid. Dans la dernière entrée de l'exemple précédent, le PID est 0x44, ou 68 en décimal. |
Bloc d'environnement du processus (PEB) |
Le nombre hexadécimal suivant le mot Peb est l'adresse du bloc d'environnement de processus. Dans la dernière entrée de l'exemple précédent, le PEB est situé à l'adresse 0x7FFDE000. |
PID du processus parent |
Le nombre hexadécimal qui suit le mot ParentCid est le PID du processus parent. Dans la dernière entrée de l'exemple précédent, le PID du processus parent est 0x26, ou 38 en décimal. |
Image |
Le nom du module propriétaire du processus. Dans la dernière entrée de l'exemple précédent, le propriétaire est spoolss.exe. Dans la première entrée, le propriétaire est le système d'exploitation lui-même. |
Adresse de l'objet du processus |
Le nombre hexadécimal après le mot ObjectTable. Dans la dernière entrée de l'exemple précédent, l'adresse de l'objet du processus est 0x80925c68. |
Pour afficher tous les détails d'un processus, réglez les indicateurs sur 7. Le processus lui-même peut être spécifié en définissant Process égal à l'adresse du processus, Process égal à l'ID du processus ou ImageName égal au nom de l'image exécutable. Voici un exemple :
kd> !process fb667a00 7
PROCESS fb667a00 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: e1000f88 TableSize: 112.
Image: System
VadRoot fb666388 Clone 0 Private 4. Modified 9850. Locked 0.
FB667BBC MutantState Signalled OwningThread 0
Token e10008f0
ElapsedTime 15:06:36.0338
UserTime 0:00:00.0000
KernelTime 0:00:54.0818
QuotaPoolUsage[PagedPool] 1480
Working Set Sizes (now,min,max) (3, 50, 345)
PeakWorkingSetSize 118
VirtualSize 1 Mb
PeakVirtualSize 1 Mb
PageFaultCount 992
MemoryPriority BACKGROUND
BasePriority 8
CommitCharge 8
THREAD fb667780 Cid 2.1 Teb: 00000000 Win32Thread: 80144900 WAIT: (WrFreePage) KernelMode Non-Alertable
80144fc0 SynchronizationEvent
Not impersonating
Owning Process fb667a00
WaitTime (seconds) 32278
Context Switch Count 787
UserTime 0:00:00.0000
KernelTime 0:00:21.0821
Start Address Phase1Initialization (0x801aab44)
Initial Sp fb26f000 Current Sp fb26ed00
Priority 0 BasePriority 0 PriorityDecrement 0 DecrementCount 0
ChildEBP RetAddr Args to Child
fb26ed18 80118efc c0502000 804044b0 00000000 KiSwapThread+0xb5
fb26ed3c 801289d9 80144fc0 00000008 00000000 KeWaitForSingleObject+0x1c2
Notez que l'adresse de l'objet processus peut être utilisée comme entrée pour d'autres extensions, telles que !handle, afin d'obtenir des informations supplémentaires.
Le tableau suivant décrit certains des éléments de l'exemple précédent.
Element | Signification |
---|---|
WAIT | Le commentaire parenthétique qui suit ce titre donne la raison de l'attente. La commande dt nt!_KWAIT_REASON affiche une liste de toutes les raisons de l'attente. |
ElapsedTime |
Indique le temps écoulé depuis la création du processus. Ce temps est affiché en unités Heures:Minutes:Secondes.Millisecondes. |
UserTime |
Indique la durée d'exécution du processus en mode utilisateur. Si la valeur de UserTime est exceptionnellement élevée, elle peut identifier un processus qui épuise les ressources du système. Les unités sont les mêmes que pour ElapsedTime. |
KernelTime |
Indique la durée d'exécution du processus en mode noyau. Si la valeur de KernelTime est exceptionnellement élevée, cela peut indiquer que le processus épuise les ressources du système. Les unités sont les mêmes que pour ElapsedTime. |
Tailles des ensembles de travail |
Répertorie la taille actuelle, minimale et maximale du jeu de travail du processus, en pages. Une taille de jeu de travail exceptionnellement élevée peut être le signe d'un processus qui fuit la mémoire ou épuise les ressources du système. |
Entrées QuotaPoolUsage |
Répertorie le pool paginé et non paginé utilisé par le processus. Sur un système présentant une fuite de mémoire, la recherche d'une utilisation excessive du pool non paginé par tous les processus peut vous indiquer le processus à l'origine de la fuite de mémoire. |
Cloner |
Indique si le processus a été créé par les sous-systèmes POSIX ou Interix. |
Privée |
Indique le nombre de pages privées (non partageables) actuellement utilisées par le processus. Cela inclut la mémoire paginée à l'intérieur et la mémoire paginée à l'extérieur. |
Outre les informations relatives à la liste des processus, les informations relatives au threading contiennent une liste des ressources sur lesquelles le threading a des verrous. Ces informations figurent sur la troisième ligne de sortie après l'en-tête du threading. Dans cet exemple, le threading a un verrou sur une ressource, un SynchronizationEvent dont l'adresse est 80144fc0. En comparant cette adresse à la liste des verrous affichée par l'extension !kdext*.locks, vous pouvez déterminer quels threads ont des verrous exclusifs sur les ressources.
L'extension !stacks donne un bref résumé de l'état de chaque threading. Elle peut être utilisée à la place de l'extension !process pour obtenir une vue d'ensemble rapide du système, en particulier lors du débogage de problèmes multithreads, tels que des conflits de ressources ou des blocages.