Comment détecter la création/l'arrêt d'un processus Win32 sans pilotes du noyau
Bien que l'implémentation d'un pilote en mode noyau pour surveiller les événements de processus soit une approche viable , ce n'est pas toujours faisable. Cet article explique comment détecter la création et l'arrêt de processus Win32 à l'aide des seules fonctions de l'API Win32.
Approche basée sur l'API Win32
L'API Win32 ne fournit pas de moyen direct de enregistrer les rappels à l’échelle du système pour les événements de processus. Il existe cependant une technique qui exploite la fonction WaitForSingleObject :
Exemple de code
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 exécutera la fonction WaitOrTimerCallback lorsque le processus identifié par dwProcessID se terminera.
Remarque
Bien que cette approche soit plus accessible que l'écriture d'un pilote de noyau , il n'offre pas le même niveau de flexibilité ou d'efficacité. Il est également important de considérer que WaitForSingleObject est une fonction bloquante, elle peut donc avoir un impact sur les performances de votre application dans certains scénarios.
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!