zoukankan      html  css  js  c++  java
  • 强制重启N种方法

    强制重启N种方法

    本文章已收录于:
     
    分类:

    1.

    无意中看到一种通过控制92H端口bit0位,将其置1来实现重启的方法,刚才测试了一下,效果真好

        mov al, 01
        out 92h, al

    2.

    另一种,模拟键盘的reset

         mov al, 0xfe
         out 0x64, al



    i8042 :键盘控制器 
    8042的端口在cpu的io空间地址如下: 

    port----Read/Write-----Function 
    0x60----Read----------Read Input Buffer 
    0x60----Write---------Write Output Buffer 
    0x64----Read----------Read Status Register 
    0x64----Write---------Send Command 

    再者

    3.

       status=ZwInitiatePowerAction(PowerActionShutdown, 
         PowerSystemShutdown, 
         0, 
         TRUE 
        );

    再者

    4.

    HalReturnToFirmware(HalRebootRoutine);

    驱动中直接使用由Hal.dll导出的HalReturnToFirmware函数来实现关机,这是系统正常关机时调用的最后一个API,也是最实效的一个API,这个函数会直接调用Bois例程,然后系统就真的关机了


    再者

    5.
    KeBugCheck(POWER_FAILURE_SIMULATE);

    也许你会认为这是BugCheck,那么你错了,这并不会引发bugcheck

    这样实际上会调用了HalReturnToFirmware(HalRebootMachine)

    当执行了BugCheck回调后,无BSOD,无Crash dump,只会进行非常干净、简单和直接的重启动

     实现源码为

    /* Check if this is power failure simulation */
        if (BugCheckCode == POWER_FAILURE_SIMULATE)
        {
            /* Call the Callbacks and reboot */;
            KiDoBugCheckCallbacks();
            HalReturnToFirmware(HalRebootRoutine);
        }
  • 相关阅读:
    Webkit是如何加载网页的
    代码无错是优? 工厂模式
    JavaScript 记忆 Memoization
    输入一个新的网址后到完全显示页面,浏览器做了哪些工作?
    向服务器请求数据的五种技术
    setTimeout(0) 即将退役
    JS 对象机制深剖——new 运算符
    正则表达式中的回溯
    闭包与柯里化
    正则表达式工作原理
  • 原文地址:https://www.cnblogs.com/ansen312/p/5865264.html
Copyright © 2011-2022 走看看