Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann ich die Erstellung/Beendigung eines Win32-Prozesses ohne einen Kernelmodus-Treiber in C erkennen?

Susan Sarandon
Freigeben: 2024-11-21 02:47:10
Original
198 Leute haben es durchsucht

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

Erkennen Sie die Erstellung/Beendigung von Win32-Prozessen ohne einen Kernel-Modus-Treiber in C

Während NT-Kernelmodus-Treiber eine umfassende API für Prozesse bieten Erstellungs- und Beendigungsbenachrichtigungen ist es möglich, eine ähnliche Funktionalität in C zu erreichen, indem nur Win32-API-Funktionen verwendet werden.

Verwendung von WMI

WMI (Windows Management Instrumentation) bietet einen umfangreichen Satz von Ereignisbenachrichtigungen, einschließlich solcher im Zusammenhang mit der Erstellung und Beendigung von Prozessen. Allerdings ist WMI möglicherweise nicht für alle Szenarien geeignet, insbesondere wenn Sie nur die Prozessbeendigung verfolgen müssen.

Verwenden eines Rückrufs

Ein effizienterer Ansatz ist die Verwendung von a Callback-Funktion, um auf die Beendigung eines bestimmten Prozesses zu warten. Dies kann mit den folgenden Schritten erreicht werden:

  1. Rufen Sie OpenProcess auf, um ein Handle für den Prozess zu erhalten, den Sie überwachen möchten.
  2. Rufen Sie RegisterWaitForSingleObject mit dem Prozesshandle als Parameter auf. Geben Sie WaitOrTimerCallback als Rückruffunktion an, die ausgeführt werden soll, wenn der Prozess beendet wird.
  3. Die WaitOrTimerCallback-Funktion wird aufgerufen, sobald der Prozess beendet wird.

Beispielcode

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);
Nach dem Login kopieren

Dieser Code zeigt ein Meldungsfeld an, sobald der Prozess mit der ID dwProcessID beendet wird.

Das obige ist der detaillierte Inhalt vonWie kann ich die Erstellung/Beendigung eines Win32-Prozesses ohne einen Kernelmodus-Treiber in C erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage