C++ 是否有方法接收有关windows中启动的进程的事件?

C++ 是否有方法接收有关windows中启动的进程的事件?,c++,windows,winapi,C++,Windows,Winapi,TL;博士 我已经编写了一个C++程序,关闭启动程序时没有运行的所有“新”程序。目前,我通过捕获所有PID,然后根据此列表不断检查所有注册的应用程序来实现这一点。我试图关闭/杀死那些不在我名单上的人。对于这样一个简单的任务,这是非常CPU密集型的。有没有办法接收某种windows事件,这样我就不需要非常活跃的线程 我找到了钩子,它可以做我需要它做的事情,但它似乎是为了其他目的,而不是我需要的 简言之: 在进程启动后/启动前,我是否可以从windows接收到事件?理想情况下,您可以在用户模式下执行

TL;博士

我已经编写了一个C++程序,关闭启动程序时没有运行的所有“新”程序。目前,我通过捕获所有PID,然后根据此列表不断检查所有注册的应用程序来实现这一点。我试图关闭/杀死那些不在我名单上的人。对于这样一个简单的任务,这是非常CPU密集型的。有没有办法接收某种windows事件,这样我就不需要非常活跃的线程

我找到了钩子,它可以做我需要它做的事情,但它似乎是为了其他目的,而不是我需要的

简言之:


在进程启动后/启动前,我是否可以从windows接收到事件?

理想情况下,您可以在用户模式下执行此操作,而无需轮询,我唯一能想到的就是接近


可以找到C++的例子。您可能还想了解一下InstanceCreationEvent和Win32 ProcessStartTrace之间的区别。

查看kiosk模式。如果没有停产。旧功能。您需要使用
PsSetCreateProcessNotifyRoutine[Ex]
Huh注册自己的回调,这可能就是我需要的。如果它也能像我想要的那样工作,那么它的描述就有点让人困惑了,但是我要尝试一下。谢谢没有轮询-但是如何在内部实现此WMI事件?我是说wmi本身是如何得到进程启动/停止的通知的?如果存在一些用于此的用户模式api(无轮询),我们可以自己直接调用它,而无需wmi和rpc。如果wmi自己进行轮询—这种无意义的使用—可以在不使用wmiI的情况下直接进行轮询,则会假定wmi不进行轮询,而是使用PsSetCreateProcessNotifyRoutine或ETW。我不知道为什么没有简单的用户模式API做同样的事情。根据WMI,像Win32_uuProcessStartTrace这样的外部事件不轮询。是的,你说得对。wmi在此使用
krnlprov.dll
,它通过Microsoft Windows内核进程(
{22FB2CD6-0E7B-422B-A0C7-2FAD1FD0E716}
)上的ETW从内核获取事件