Maison > développement back-end > C++ > le corps du texte

La création et la terminaison des processus peuvent-elles être surveillées en mode utilisateur avec les API Win32 ?

DDD
Libérer: 2024-11-20 16:50:31
original
495 Les gens l'ont consulté

Can Process Creation and Termination be Monitored in User Mode with Win32 APIs?

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal