Maison > développement back-end > C++ > Comment puis-je détecter la création/l'arrêt du processus Win32 sans pilote en mode noyau en C ?

Comment puis-je détecter la création/l'arrêt du processus Win32 sans pilote en mode noyau en C ?

Susan Sarandon
Libérer: 2024-11-21 02:47:10
original
253 Les gens l'ont consulté

How Can I Detect Win32 Process Creation/Termination Without a Kernel-Mode Driver in C  ?

Détecter la création/l'arrêt de processus Win32 sans pilote en mode noyau en C

Alors que les pilotes en mode noyau NT offrent une API complète pour les processus notifications de création et de résiliation, il est possible d'obtenir des fonctionnalités similaires en C en utilisant uniquement les fonctions de l'API Win32.

En utilisant WMI

WMI (Windows Management Instrumentation) fournit un riche ensemble de notifications d'événements, y compris celles liées à la création et à l'arrêt des processus. Cependant, WMI peut ne pas convenir à tous les scénarios, surtout si vous devez suivre uniquement la fin du processus.

Utiliser un rappel

Une approche plus efficace consiste à utiliser un fonction de rappel pour attendre la fin d'un processus spécifique. Ceci peut être réalisé en suivant les étapes suivantes :

  1. Appelez OpenProcess pour obtenir un handle du processus que vous souhaitez surveiller.
  2. Appelez RegisterWaitForSingleObject avec le handle du processus comme paramètre. Spécifiez WaitOrTimerCallback comme fonction de rappel à exécuter à la fin du processus.
  3. La fonction WaitOrTimerCallback sera appelée une fois le processus terminé.

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

Ce code affichera une boîte de message une fois le processus terminé avec l'ID dwProcessID se termine.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal