监视系统中的进程启动

时间:2008-11-16 07:18:05

标签: c# .net c++ winapi

有没有办法在系统开始之前监控系统启动过程?

例:
在ZoneAlarm或防病毒程序等程序上,运行程序时会询问您是否允许在运行之前运行该程序...

4 个答案:

答案 0 :(得分:7)

有几种方法可以做到这一点。如果你只需要跟踪来自特定程序(或几个程序)的进程创建,这里提到的EasyHook / Detours方法可以很好地工作,但你实际上需要在每个程序中安装CreateProcess的钩子,所以它不是一个如果您想跟踪系统中的所有流程创建,那么这是一个很好的解决方案。

在基于NT的Windows变体(NT / 2000 / XP / Vista)中有一个特定的API,称为PsSetCreateProcessNotifyRoutine()。不幸的是,你只能从ring0调用这个函数,所以需要在驱动程序中完成。这个CodeProject文章中有一个方便的解释(和代码):http://www.codeproject.com/KB/threads/procmon.aspx

AFAIK,这只是一个通知,它本身不允许您告诉系统是否应该创建该进程。但是,如果您需要这样做,您可以暂停该过程(例如,通过将其作为调试器附加),同时您的代码决定是否要将其终止。

答案 1 :(得分:6)

您应该查看easyhook-continuing-detours项目,该项目是Microsoft Detours项目的.NET端口。它将允许您挂钩非托管API(例如CreateProcess)。查看类似FileMon的简单程序here的代码示例。

答案 2 :(得分:3)

您可以通过使用实时ETW使用者来了解流程何时开始 - 但是,为了能够采取某些可能取消流程的操作,您将不得不这样做一些阴影/未记录的东西,比如挂钩CreateProcess,或使用内核过滤器驱动程序来阻止对EXE的读取。

答案 3 :(得分:2)

只需使用流程创建通知即可。 它包含在Windows中。 你不需要挂钩。