>백엔드 개발 >C++ >Win32 API를 사용하여 사용자 모드에서 프로세스 생성 및 종료를 모니터링할 수 있습니까?

Win32 API를 사용하여 사용자 모드에서 프로세스 생성 및 종료를 모니터링할 수 있습니까?

DDD
DDD원래의
2024-11-20 16:50:31582검색

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

C에서 Win32 프로세스 생성 및 종료 감지

PsSetCreateProcessNotifyRoutine() API를 사용하여 커널 모드 드라이버를 구현하는 것은 Win32 프로세스 생성 및 종료를 수신하는 일반적인 방법입니다. Win32 프로세스 생성 또는 종료에 대한 알림. 그러나 C에서 Win32 API 기능을 활용하는 대체 접근 방식이 있습니까?

Win32 API 제한

무한 루프에서 활성 프로세스 목록을 쿼리하는 것은 이상적이지 않습니다. 리소스 소비가 높기 때문에 솔루션입니다. 안타깝게도 커널 모드 드라이버 접근 방식과 동일한 전체 기능을 제공하는 기본 Win32 API 기능은 없습니다.

WMI(Windows Management Instrumentation)

WMI는 프로세스 이벤트 모니터링을 위한 잠재적인 솔루션입니다. 프로세스 이름과 같은 특정 기준을 기반으로 프로세스의 생성 및 종료를 추적할 수 있습니다. 그러나 WMI는 커널 모드 드라이버에 비해 오버헤드가 더 높을 수 있습니다.

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

이 코드는 다음을 사용하여 콜백 함수를 등록합니다. RegisterWaitForSingleObject(). hProcHandle로 식별된 프로세스가 종료되면 등록된 콜백이 실행되어 WaitOrTimerCallback 함수를 호출하고 메시지 상자 알림을 표시합니다.

위 내용은 Win32 API를 사용하여 사용자 모드에서 프로세스 생성 및 종료를 모니터링할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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