首页 > Windows开发 > 详细

编程实现Windows瞬间关机

时间:2014-01-25 10:59:37      阅读:540      评论:0      收藏:0      [点我收藏+]

我们先来看看Windows正常的关机流程:
①关机指令通知Windows子系统
csrss.execsrss.exe收到通知后会和Winlogon.exe做一个数据交换,再由Winlogon.exe通知csrss.exe开始关闭系统的流程。
②csrss
.exe依次查询拥有顶层窗口的用户进程,让这些用户进程退出。
③接着开始终止系统进程(以上3个步骤是整个Windows关机过程中最耗费时间的一段,大多数关机缓慢的原因都是因为这3个步骤引起的)。
④Winlogon.exe调用NtShutdownSystem()函数来命令系统执行后面的扫尾工作,最后关机。

想要实现快速关机,我们完全可以跳过前三个步骤,直接调用NtShutdownSystem来实现。 但是NtShutdownSystem并不是任何进程都可以随便调用的,需要首先给调用进程提升权限,赋予SE_SHUTDOWN_PRIVILEGE权限,这就需要借助RtlAdjustPrivilege函数,NtShutdownSystem和RtlAdjustPrivilege都是Windows 的内核级API。

bubuko.com,布布扣
NTSTATUS
RtlAdjustPrivilege(
      ULONG Privilege
      BOOLEAN Enable
      BOOLEAN Client
      PBOOLEAN WasEnabled
  );
NTSYSAPI 
NTSTATUS
NTAPI
NtShutdownSystem(IN SHUTDOWN_ACTION Action );
bubuko.com,布布扣

这两个API都位于NTDLL.dll里面,微软并未在MSDN中公开,向大家分享一册MSDN未归档API文档,下载地址:http://url.cn/M7Srht

按照以上思路,我们就可以在应用程序中用代码实现。
我编写的CPowerManager源码:http://url.cn/RwnUpb

(注意:快速关机虽然不会损坏硬件和操作系统,但是可能会造成某些正在运行的进程内存中尚未保存数据的丢失!)

编程实现Windows瞬间关机

原文:http://www.cnblogs.com/cpper-kaixuan/p/3532742.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!