系统中监控进程的启动

7

有没有一种方法可以在系统启动进程之前监控它们的启动?

例如:
在防火墙程序或杀毒软件等程序中,当您运行一个新程序时,在运行之前会询问您是否允许此程序运行...

4个回答

7
有几种方法可以做到这一点。如果您只需要跟踪来自特定程序(或几个程序)的进程创建,那么在此提到的EasyHook/Detours方法将非常有效,但您需要在每个程序中对CreateProcess安装钩子,因此如果您想要跟踪系统中的所有进程创建,则不是一个很好的解决方案。
NT-based Windows变体(NT/2000/XP/Vista)中有一个特定的API用于此,称为PsSetCreateProcessNotifyRoutine()。不幸的是,您只能从ring0调用此函数,因此它需要在驱动程序中完成。在这篇CodeProject文章中有一个方便的解释(和代码):http://www.codeproject.com/KB/threads/procmon.aspx
据我所知,这只是一个通知,本身并不能告诉系统是否应该创建进程。但是,如果您需要这样做,您可以暂停进程(例如通过将其附加为调试器)而您的代码决定是否杀死它。

6

请不要在生产代码中这样做,它不适用于x64,并且很可能会造成混乱。 - Ana Betts
@Paul:为什么它会造成混乱? - Dieter Meemken

3

您可以通过使用实时ETW消费者找出进程何时启动 - 但是,如果要采取可能会取消进程启动的某些操作,则必须做一些不光彩/未记录的事情,例如挂钩CreateProcess,或使用内核过滤驱动程序阻止对EXE的读取。


2
只需使用进程创建通知。 它已包含在Windows中。 您无需挂钩任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接