需要对UPS进行监控,不能让人随便终止进程了,就像nod32的服务一样,你在进程管理器里终止它马上就重新启动了,而且没看到其它进程.

解决方案 »

  1.   

    服务设置里面有相应的参数,SERVICE_FAILURE_ACTIONS
      

  2.   

    同意楼上的! SERVICE -> Properties -> Recovery!
      

  3.   

    修改ETHREAD的CrossThreadFlags为PS_CROSS_THREAD_FLAGS_BREAK_ON_TERMINATION一kill就BSOD简单点用驱动,ring3下麻烦点,要用NtSystemDebugControl,不过这个函数已经被杀毒软件封了
      

  4.   

    good good study, day-day up.
      

  5.   

    另一个思路,我是这么搞的:
    服务的停止事件关闭,这样不能直接关闭,但可以在管理器里KILL,所以,你要最好写入DLL的,然后,你的服务一启动,你就注入一个DLL到SVCHOST.EXE中去,每5秒左右查询一下服务状态(用SMC查)得到的结果如果不是无响应或已停止或正在停止都立即重建服务并启动。总之,写成病毒机制。不一定要用驱动,因为,这个对别人的干扰不大,他绝对不会为了关闭你这个正常的服务而大动干戈的。另一个方法是双服务(因为可以系统还没有启动,所以使用双服务比较好,就是一个服务停止了,就立即重建另一个,相互之间定时互询,正常时就一个服务在工作,另一个只负责查询主服务有无被关闭,主服务也要查询守护服务有无被关闭),不用写得太严格,用户关不掉就行了。
      

  6.   

    反正我觉得不管怎样做,都有被kill掉的危险,即使是我在3楼说的方法,别人也可以写个驱动,把那个标志先改掉,再进行kill,这样就不会蓝屏了。看LZ在什么场合用了。如果简单想防防君子,那么ring3也就够了,如果要防小人,还是要用到ring0,而且还要把进程隐藏
      

  7.   

    当然在sevices.msc里能关掉没问题,这个我不用管,主要是怕服务进程意外终止,需要随时监控电力情况.
      

  8.   

    无非就是Hook或者守护,至于驱动,要看你的使用场合,驱动要写的稳定和适用各种系统环境不简单,除非一定要使用,否则不推荐。
      

  9.   

    声明一下,它本身是一个exe服务.问题是可以在任务管理器中终止.
      

  10.   

    需要一个程序创建服务后设置,调用ChangeServiceConfig2设置SC_ACTION_RESTART
    参见ChangeServiceConfig2设置SERVICE_CONFIG_FAILURE_ACTIONS