c++ - 如何在 C++ 中检测 win32 进程的创建/终止

标签 c++ winapi process

我知道要接收有关 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/

相关文章:

c++ - 在 C++ 中使用 boost 进程库输出

c++ - C++ 中的对象初始化和对象工厂

c++ - 如何为我的 C++/Win32 程序禁用程序兼容性助手?

windows - 如何从 QFile 或 QSaveFile 获取 Windows HANDLE 以用于 ReOpenFile?

c++ - 将 list 文件移动到 dll?

nginx - php-fpm 进程监控/分析

c++ - C++中的shell排序序列实现

c# - 是否有支持混合 C++ 和 C# 应用程序的崩溃报告服务?

c++ - 如何使用 C++ 为 Windows 应用程序创建 GUI?

java - 无法通过java程序在mac os中运行shell脚本