我知道要接收有关 Win32 进程创建或终止的通知,我们可能会使用 API PsSetCreateProcessNotifyRoutine()
实现 NT 内核模式驱动程序,该驱动程序提供注册系统范围回调函数的能力,该函数是每次新进程启动、退出或终止时由操作系统调用。
这是否可能在不创建 NT 内核模式驱动程序的情况下,仅使用使用 c++ 的 Win32 API 函数?当然不使用无限循环查询事件进程列表的基本解决方案。
是否有任何库或 win32 API 提供相同的功能(系统范围的回调、异步事件)?
最佳答案
WMI 很棒,它也适用于进程名称。虽然如果您需要跟踪进程终止,更轻量级和更简单的方法如下:
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);
一旦进程终止,此代码将调用 WaitOrTimerCallback
。
关于c++ - 如何在 C++ 中检测 win32 进程的创建/终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556048/