Maison >développement back-end >C++ >Comment détecter la création/résiliation de processus Win32 sans pilotes de noyau ?

Comment détecter la création/résiliation de processus Win32 sans pilotes de noyau ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 07:48:011080parcourir

How to Detect Win32 Process Creation/Termination Without Kernel Drivers?

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 :

  1. Obtenir le handle du processus : Récupérer le handle du processus à surveiller à l'aide d'OpenProcess.
  2. Enregistrer un rappel : Utilisez RegisterWaitForSingleObject pour enregistrer une fonction de rappel, WaitOrTimerCallback, qui sera invoquée à la fin du processus.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn