系统瞬间关闭或重启

系统瞬间关闭或重启

传统的windows关机程序比较繁琐,当您选择关机或者重启的时候,系统会先向运行的各个程序发送一个消息WM_QUERYENDSESSION,一般的程序收到该消息后会退出,但是有些程序不会,比如你编辑了一段文本,记事本或者word程序收到该消息后会提示用户是否要保存文件,当然,系统有个保留时间,他不会等到用户做出相应,而是在一段时间内,如果用户不做出任何响应,系统也会强制退出这些程序,这个等待时间系统会弹出一个强制结束的对话框,上面有个进度条,相信大家都见过,当退出这些常规应用程序后,系统便会保存用户所有设置,然后再关机并切断电源。一般的情况大家都知道,刚装完系统的时候,关机是很快的,但是随着安装启动的程序越多,关机越慢,甚至有些程序因为各种原因假死在后台,不会理会系统的关机消息,这样,关机就变得异常漫长,甚至会停留在--正在保存用户设置的界面,然后就没有反应了,这时,您不得不强制关机,也就是按住POWER按钮4秒钟强制切断电源。最近,我就是有这种现象,由于安装的程序太多,导致每次关机异常缓慢,搜索了不少办法,流传最广的就是打开任务管理器,然后按住CTRL按键不松手然后选择菜单的关机或者重启,我想,既然任务管理器可以实现这个功能,那么就一定可以在程序中实现,经过查找资料,终于知道了这样一个实现过程!

原来,控制系统关闭或者重启的函数保存在ntdll.dll中,传统的关机当我们调用exitwindows函数后,系统会做很多关机前的准备工作,比如发送WM_QUERYENDSESSION消息啊,保存设置啊,最后才是切断电源,这是exitwindows内部机制的效果,如果我们直接调用系统的切断电源函数,那么岂不是可以很快的关机么?继续查找ntdll.dll,发现其中有个输出函数ntShutdownSystem,看字面理解好像能帮我们完成关机工作,通过查找资料(注意:该函数是微软未公开函数,msdn是没有收录的)找到了该函数的原始定义:

NTSYSAPI

NTSTATUS

NTAPI

NtShutdownSystem(SHUTDOWN_ACTION);

//SHUTDOWN_ACTION   结构定义:

 typedef  enum   _SHUTDOWN_ACTION {

ShutdownNoReboot,  

ShutdownReboot,  

ShutdownPowerOff  

}SHUTDOWN_ACTION;  

既然有了原始定义,我们比葫芦画瓢就好办多了,首先用AdjustTokenPrivileges提升程序的关机权限,然后NtShutdownSystem(1)就是重启,NtShutdownSystem(2)就是关机!

需要注意的是,使用NtShutdownSystem可以强制关闭Windows系统。它在关闭系统时不会事先通知系统服务程序和用户程序。行为很是粗鲁的,除非迫不得已,最好不要使用这个函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值