>백엔드 개발 >C++ >C에서 커널 모드 드라이버 없이 Win32 프로세스 생성/종료를 어떻게 감지할 수 있습니까?

C에서 커널 모드 드라이버 없이 Win32 프로세스 생성/종료를 어떻게 감지할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-21 02:47:10214검색

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

C에서 커널 모드 드라이버 없이 Win32 프로세스 생성/종료 감지

NT 커널 모드 드라이버는 프로세스에 대한 포괄적인 API를 제공합니다. 생성 및 종료 알림, Win32 API만 사용하여 C에서 유사한 기능을 달성하는 것이 가능합니다.

WMI 사용

WMI(Windows Management Instrumentation)는 프로세스 생성 및 종료와 관련된 알림을 포함하여 다양한 이벤트 알림 세트를 제공합니다. 그러나 WMI는 모든 시나리오에 적합하지 않을 수 있으며, 특히 프로세스 종료만 추적해야 하는 경우에는 더욱 그렇습니다.

콜백 사용

보다 효율적인 접근 방식은 특정 프로세스가 종료되기를 기다리는 콜백 함수. 이는 다음 단계를 통해 달성할 수 있습니다.

  1. OpenProcess를 호출하여 모니터링하려는 프로세스에 대한 핸들을 얻습니다.
  2. 프로세스 핸들을 매개변수로 사용하여 RegisterWaitForSingleObject를 호출합니다. 프로세스가 종료될 때 실행할 콜백 함수로 WaitOrTimerCallback을 지정합니다.
  3. WaitOrTimerCallback 함수는 프로세스가 종료되면 호출됩니다.

예제 코드

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);

이 코드는 ID 처리가 완료되면 메시지 상자를 표시합니다. dwProcessID가 종료됩니다.

위 내용은 C에서 커널 모드 드라이버 없이 Win32 프로세스 생성/종료를 어떻게 감지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.