2008-11-16 110 views
7

有没有办法在系统启动之前监视系统中启动的进程?在系统中监视进程启动

举例:
在象ZoneAlarm或防病毒程序的程序,当你运行一个程序会询问你是否允许运行此程序或不运行之前...

回答

3

你可以找出流程时启动通过使用实时ETW消费 - 然而,能够采取一些行动可能可能从开始取消的过程中,你必须做一些见不得人/无证,如挂钩的CreateProcess,或者使用内核筛选器驱动程序阻止对EXE的读取。

6

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

+0

请不要在生产代码中执行此操作,它在x64上不起作用,并且很可能会导致混乱 – 2008-11-19 22:51:20

2

只需使用进程创建通知。它包含在Windows中。 你不需要钩住任何东西。

7

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

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

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