[原]快速关机

  在CSDN上,用户pbtincsu 给出了这么一段代码,据说可以用来超快速关机:

Public Declare Function RtlAdjustPrivilege& Lib "ntdll" (ByVal Privilege&, ByVal Newvalue&, ByVal NewThread&, Oldvalue&)
Public Declare Function NtShutdownSystem& Lib "ntdll" (ByVal ShutdownAction&)
Public Const SE_SHUTDOWN_PRIVILEGE& = 19
Public Const SHUTDOWN& = 0

Sub Main()
    RtlAdjustPrivilege SE_SHUTDOWN_PRIVILEGE, 1, 0, 0
    NtShutdownSystem SHUTDOWN
End Sub

我试了一下,关机速度的确非常快,大约是两秒钟(我的机器配置:Pentium M 1.5GHz /w 2MB L2 Cache,512 MB DDR 333 SDRAM,40GB 4200 rpm HDD,Mobility Radeon 9600 /w 64MB ,使用Windows XP SP2 Professional 操作系统)。后来用户Tenner告诉大家,按下Ctrl+Alt+Del后在弹出的Windows安全对话框(如果你在使用Windows XP而且没有进行必要的设置,或许你只能看到任务管理器)里面按着Ctrl键单击“关机”会有同样的效果。我试了一下,Windows这时会跳出一个对话框,并且告诉我这是紧急关机。
  pbtincsu 在帖子里提出的问题是,这样关机是否会对硬件有损伤。
  首先我尝试在MSDN上寻找这段代码使用的两个函数:RtlAdjustPrivilege和NtShutdownSystem,结果很令人沮丧,没有任何和这两个函数有关的信息。在Google上搜索也只找到NtShutdownSystem的部分内容:
NtShutdownSystem

NTSYSAPI
NTSTATUS
NTAPI
NtShutdownSystem(IN SHUTDOWN_ACTION      Action );
Function NtShutdownSystem closes system. Caller should manually inform running processes about pending shutdown action.
(翻译)NtShutdownSystem函数用于关闭系统。调用者应该手动向运行的进程发送有关即将关闭操作系统的消息。
----------------------------------------------------------------------
Action
    Type of shudown defined in SHUTDOWN_ACTION enumeration type.
(翻译)
Action
    关机类型,在SHUTDOWN_ACTION枚举中有定义。

所以我决定自己试试。再次执行这段代码,我在音频属性中禁用掉声音,把耳朵贴在机器的右下位置,那里有这台机器的唯一一块硬盘。结果很明显,在机器关掉的同时,我清楚的听到硬盘磁针复位的声音。这说明这段代码在关机时复位了硬盘,而一般非法关机带来的硬件损伤就是硬盘磁针没有复位而在震荡中刮伤盘片,所以可以认为这段代码的关机方式不会对硬件构成损伤。
  再对上面找到的关于函数NtShutdownSystem的说明,看上去就是不告诉任何正在运行的进程有关即将关机的消息,然后直接把Windows喀嚓掉,既然Windows都关了,那正在运行的进程也就活不了了。也就是不用慢吞吞等那些进程自己退出掉,直接强制关闭整个系统。
  从这一点上分析,对硬件是没有损伤的。但如果某个进程正在读写硬盘上的文件,就可能导致文件系统出错。如果某个进程有未保存的信息,这些信息将会丢失。
  因此,我认为,如果确实嫌Windows关机太慢的话(我的关机大约要1分钟),在保存了所有数据并且确保没有程序在读写硬盘的情况下,使用这种方法关机是可行的。当然,受函数的限制,这两个函数(或者,至少NtShutdownSystem这个函数)只能在Windows 2000/XP/2003 或者更新的Windows上工作,这段代码也就不能支持 Windows 95/98/ME 了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值