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);
        }
  • 相关阅读:
    hp一體機cartridge error及carriage jam4/22
    指纹仪zkonline.ocx:access violation...4/13
    IIS6:Service Unaviable 9/27
    寶寶的成長腳印3/15
    vs2003不能调试4/8
    C++ 的复制构造函数
    导入与导出数据 大容量复制程序(bcp)
    关于SQlserver数据库的加密应用
    DataGridView使用技巧
    使用C# 向记事本窗口发送消息
  • 原文地址:https://www.cnblogs.com/ansen312/p/5865264.html
Copyright © 2011-2022 走看看