当某个C#程序在运行的时候,有其他的不相关的进程启动了,C#代码能否感知到,有没有相应的类?就像FileSystemWatcher来监听文件的变化,有没有相应的类来监听系统进程的变化?

解决方案 »

  1.   

    Hook NtCreateProcess在用户态下是可以的,在内核态不行。
    用户态HOOK NtCreateProcess,得到EIP后可以获得的信息太少,一般不这样做。
    可以有以下几个内核态的方法:
    1.建立PsSetCreateProcessNotifyRoutine,具体用法网上有介绍(《安全稳定的进线程监控》),但是只能得到进程创建的通知,不能阻止进程创建。
    2.Hook NtCreateProcessEx 注意WINDOWS创建进程在内核态时不是NtCreateProcess而是NtCreateProcessEx。
    3.Hook Mm/NtCreateSection 这个网上也有介绍,要比Hook NtCreateProcessEx好一点,不过条件判断要麻烦一些