• 编程实现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

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

  • 相关阅读:
    AOJ.866 飞越原野 (三维BFS)
    UVA.129 Krypton Factor (搜索+暴力)
    UVA.10986 Fractions Again (经典暴力)
    UVA.10305 Maximum Product (暴力)
    UVA.725 Division (暴力)
    HDU.3342 Legal or Not (拓扑排序 TopSort)
    HDU.2647 Reward(拓扑排序 TopSort)
    13 成都
    15 沈阳
    14 鞍山
  • 原文地址:https://www.cnblogs.com/cpper-kaixuan/p/3532742.html
Copyright © 2020-2023  润新知