zoukankan      html  css  js  c++  java
  • 编程实现Windows瞬间关机

    我们先来看看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。

    NTSTATUS
    RtlAdjustPrivilege(
          ULONG Privilege
          BOOLEAN Enable
          BOOLEAN Client
          PBOOLEAN WasEnabled
      );
    NTSYSAPI 
    NTSTATUS
    NTAPI
    NtShutdownSystem(IN SHUTDOWN_ACTION Action );

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

    了解以上思路,我们在应用程序中用代码实现起来就比较容易了。

    我用C++编写的CPowerManager源码:http://t.cn/8s0sVD2
    同时用JNI编写的java版powermanager:http://t.cn/8s0smGz

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

  • 相关阅读:
    OD 实验(十六)
    OD 实验(十五)
    OD 实验(十四)
    建立和安装requirements.txt依赖
    不吟诗的会计不是好程序员
    python并发编程--进程&线程--其他模块-从菜鸟到老鸟(三)
    python并发编程--协程---从菜鸟到老鸟(四)
    如何加速pandas的DataFrame
    python web
    mysql 数据类型隐式转化
  • 原文地址:https://www.cnblogs.com/cpper-kaixuan/p/3532742.html
Copyright © 2011-2022 走看看