小弟要实现这样的一个功能:定时检测系统中有没恶意进程如果使用SetTimer来控制WM_TIMER来完成,经常CPU占用N高不知道有没其他方法完成,分只有这么多了谢谢各位帮忙:)

解决方案 »

  1.   

    不到万不得已轻易不要做Polling,像你说的,CPU时间全浪费了。也别轻易下钩子,尤其是CreateProcess这种,出个Bug系统就瘫痪了,至少影响速度。这个版上不知道为什么这么多人对钩子津津乐道。其实下钩子本身就可以说是恶意进程了。即使你没有Bug,别人也下钩子如果不考虑你,也容易出事情。你如果想监视进程状况,为什么不用正经的 PsSetCreateProcessNotifyRoutine 呢?如果想检测恶意Module,还有PsSetLoadImageNotifyRoutine,写个小驱动就可以了。这都是光明大道,以后出新系统也可以继续兼容。
      

  2.   

    to:feimingbiao() 大哥,驱动我不会写呀
    给点代码可以嘛?
      

  3.   

    给你Google了一下儿,这儿:http://www.codeproject.com/threads/procmon.asp驱动程序编译得需要DDK。你现在怎么实现的?隔段儿时间就 Enumerate Process?
      

  4.   

    to feimingbiao() 
    谢谢~
    是呀,隔段时间就Enume一次
    CPU占用太高了我在Delphi中控件实现倒还没这种情况
    不解中...
      

  5.   

    你这种方法问题是如果间隔太短,CPU占有太高;如果间隔过长,可能抓不到东西。你现在可能间隔太短了。
      

  6.   

    to feimingbiao你给我的例子基本适用
    是不是要装DDK?
    装好DDK再需要怎么设置嘛?
      

  7.   

    DDK不需要设置,Driver程序不能在Visual Studio里面编译(严格来说可以,太麻烦)。装好DDK以后,应该有个快捷键(Start-》DDk-》Build Environment Debug或者Release之类)的,点后是个DOS Window,然后到你程序的目录,bcz就可以了,用的是makefile.DDK应该有帮助文件,有栗子,自己研究研究。