Détection de la création et de la terminaison des processus Win32 en C
L'implémentation d'un pilote en mode noyau à l'aide de l'API PsSetCreateProcessNotifyRoutine() est une méthode courante pour recevoir notifications sur la création ou la fin du processus Win32. Cependant, existe-t-il une approche alternative qui utilise les fonctions de l'API Win32 en C ?
Limites de l'API Win32
Interroger la liste des processus actifs dans une boucle infinie n'est pas un idéal solution en raison de sa forte consommation de ressources. Malheureusement, il n'existe aucune fonction native de l'API Win32 qui offre les mêmes fonctionnalités complètes que l'approche du pilote en mode noyau.
Windows Management Instrumentation (WMI)
WMI offre un solution potentielle pour surveiller les événements de processus. Il peut suivre la création et l'arrêt des processus en fonction de critères spécifiques, tels que le nom du processus. Cependant, WMI peut impliquer une surcharge plus élevée que les pilotes en mode noyau.
Approche alternative utilisant WaitOrTimerCallback
Si l'objectif principal du suivi de la fin du processus est un outil plus léger et plus efficace. est disponible :
VOID CALLBACK WaitOrTimerCallback( _In_ PVOID lpParameter, _In_ BOOLEAN TimerOrWaitFired ) { MessageBox(0, L"The process has exited.", L"INFO", MB_OK); return; } DWORD dwProcessID = 1234; HANDLE hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID); HANDLE hNewHandle; RegisterWaitForSingleObject(&hNewHandle, hProcHandle, WaitOrTimerCallback, NULL, INFINITE, WT_EXECUTEONLYONCE);
Ce code enregistre une fonction de rappel à l'aide de RegisterWaitForSingleObject(). Une fois le processus identifié par hProcHandle terminé, le rappel enregistré sera exécuté, appelant la fonction WaitOrTimerCallback et affichant une notification par boîte de message.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!