Suivre quel programme lance un certain processus?

Il y a un certain processus que je me suis dérangé, qui est continuement lancé autour d'une minute après le tuer par l'intermédiaire de l'invite de commandes ou du gestionnaire de tâches.

Actuellement, je vais avec la méthode d'avoir un fichier batch pour boucler toutes les 15 secondes, le tuer s'il est là. Cependant, je préférerais pouvoir arrêter ce qui le lance.

Existe-t-il des méthodes pour Windows 7, pour suivre comment un processus est lancé?

Il y a une chose appelée PPID (Parent Process ID), mais il est relativement "difficile" de trouver dans Windows car ce n'est pas une colonne affichée dans Task Manager, et je ne le vois même pas pour les colonnes dans Process Explorer non plus.

Deux méthodes pour faire cela

Method 1 - WMIC Method 2 - Process Monitor 

Ces deux méthodes sont assez rapides

Méthode 1 – WMIC

Je vais utiliser une réponse pour trouver le PPID en utilisant WMIC à partir d'ici https://stackoverflow.com/questions/7486717/finding-parent-process-id-on-windows

Et cela rend le reste assez simple

 C:\blah>wmic process get processid,parentprocessid ParentProcessId ProcessId 0 0 0 4 4 320 392 572 320 656 648 664 392 688 688 740 688 756 688 764 ... ... 

Le reste est assez évident.

Supposons donc que vous souhaitiez trouver qui a lancé calc.exe

Et calc.exe que vous voyez à partir du gestionnaire de tâches, est PID 7384

 C:\blah>wmic process get processid,parentprocessid | find "7384" 10896 7384 PPID PID C:\crp> 

WMIC montre les associations entre PID et PPID. Ensuite, cherchez 10896 dans le Gestionnaire des tâches, (10896 est le PPID répertorié pour le PID de 7384 de calc.exe), et dans le gestionnaire de tâches, je vois que le processus avec PID de 10896 est cmd.exe qui est le processus que j'ai utilisé pour lancer calc. Exe Et en effet cmd.exe est le processus parent qui a engendré calc.exe

Méthode 2 – Moniteur de processus

Vous pouvez le faire dans le moniteur de processus sysinternals.

Cliquez sur le filtre … filtrez-le dans la barre de menus et ajoutez un filtre filtrant le nom ou le chemin d'accès ou PID du processus, par exemple le nom du processus calc.exe ou un filtre pour le chemin et entrez c: \ windows \ system32 \ calc.exe

Je suis passé à utiliser le nom du processus

Entrez la description de l'image ici

Effectuez OK … et fichier..capture si elle ne capture pas encore.

Double-cliquez sur le bon processus, alors, dans ce cas, chargez l'image calc.exe et une boîte de dialogue de propriétés s'affiche, cliquez sur l'onglet correct, 'processus', et vous voyez le PID et le PPID (ID du processus parent).

Entrez la description de l'image ici

Et bien sûr, lorsque vous connaissez le PPID comme vous le feriez maintenant, vous pouvez le consulter dans le gestionnaire de tâches pour savoir quel processus l'a engendré

S'il s'agissait d'un processus qui fonctionnait en arrière-plan, j'utiliserais vraisemblablement l'approche Process Explorer ou les wmic traitement de base décrites par Barlop ou Robert Koritnik . Si le processus est transitoire et qu'il démarre / sort très rapidement, en laissant pas assez de temps pour effectuer les clics et les frappes nécessaires, j'utiliserais Process Monitor, tel que décrit par nixda.

Je suis un peu en retard pour cette fête, mais pour l'accomplissement:

Une autre alternative à cela (si pour une raison quelconque, vous ne voulez pas utiliser Process Monitor), c'est utiliser le suivi de processus intégré. Cela peut être activé en allant –

Panneau ctrl ….. outils administratifs …..
Politique de sécurité locale …… politique locale … politique d'audit

Vous devriez voir plusieurs options d'audit, y compris Audit Process Tracking . Activez ceci pour la catégorie Success .

Entrez la description de l'image ici

Maintenant, dans Event Viewer..Windows Logs..Security , vous verrez un événement pour "création de processus" (c'est l'ID d'événement 4688) et le nom / chemin du processus en cours de création et un champ appelé ID de processus de création. Cela contient la représentation hexadélative du PID du processus qui a créé ce processus (vous pouvez le convertir facilement en utilisant calc.exe dans la vue Programmer ).

Entrez la description de l'image ici

Vous pouvez rechercher ce PID (le PID de ce «processus créateur», c'est-à-dire le PPID) dans Task Manager ou la sortie de quelque chose comme tasklist / svc .
Si le processus n'est plus là, vous pouvez rechercher d'autres événements avec l'ID 4688 pour cet autre PID, dès qu'il a été créé.

Peu de suggestions possibles à essayer (dans un ordre aléatoire) dont certains peuvent ne pas donner des résultats réalisables ou déjà essayé. Je ne l'ai pas essayé moi-même, alors je ne propose que des idées que d'autres pourraient manquer. Brainstorming … Notez que la plupart de mes suggestions sont destinées à atténuer les problèmes plutôt que de le résoudre à sa cause. Ce sont les soi-disant mesures désespérées ou planifiez Z.

1. Informations sur la ligne de commande dans le Gestionnaire des tâches

Avez-vous vérifié la colonne de commande dans le Gestionnaire des tâches, qu'il fournisse cette information? Je suppose que vous avez déjà essayé cela.

2. Informations de processus dans Process Explorer

Si la commande est vide, j'essaye Process Explorer à partir de SysInternals et je vois si je reçois plus d'informations sur ce processus spécifique.

3. Suspendre un processus

Si vous ne parvenez pas à trouver la racine de votre problème, vous pouvez essayer de suspendre le processus afin qu'il soit toujours là, mais cela ne fait rien. Vous pouvez le faire en utilisant Resource Monitor
Suspension du processus de surveillance des ressources

Ou SysInternals Process Explorer
Process Explorer Process Suspend

Un processus inconnu qui démarre vérifie probablement les processus (par nom) et s'il voit qu'il n'est pas là, il démarre. Si vous l'arrêtez, il existera afin que ce processus d'initialisation ne génère pas une nouvelle instance.

Cela peut échouer si le processus d'initialisation utilise d'autres moyens de détection de processus (communication inter-processus), mais ce type de détection de processus est beaucoup plus difficile à développer, d'où une option plus facile, gagne.

4. Programme personnalisé

Nous pouvons traiter deux processus ici. Le premier qui vérifie l'existence du deuxième processus et le démarre (que vous tuez). Lorsque le second est en cours d'exécution, vous pouvez voir sa ligne de commande, mais en sachant que cela ne vous aide pas à ne pas commencer, et vous pouvez plutôt être après le premier processus qui lance tout. Mauvais chance.

Mais puisque vous semblez être informé par ordinateur, vous pouvez remplacer le deuxième processus (si la ligne de commande est connue) avec votre propre exécutable qui ne fait rien et se trouve juste là-bas. Il doit avoir le même nom de processus. Il pourrait également commencer et se terminer immédiatement par lui-même.

Si vous êtes vraiment bon dans le développement OS bas niveau, vous pouvez écrire un deuxième processus afin de vérifier également qui l'a démarré si cela est possible. Je ne suis pas sûr, mais l'API Windows devrait fournir de telles informations. Cela vous amènerait alors à la racine de votre problème.

5. Planificateur de tâches

Il se peut que votre processus ne soit pas engendré par d'autres processus, mais plutôt un travail de tâche planifié défini à chaque minute. Je ne sais pas si vous avez vérifié cela déjà, mais ce peut être le cas.

6. Nettoyage des infections

Une infection virale? Essayez de le détecter et de le nettoyer.