windows10 快速启动

Windows10的快速启动功能通过保存系统内核和驱动到硬盘来提高启动速度,类似休眠。但该功能可能导致某些驱动初始化失败。文章提供了一个电源管理函数`DeviceDispatchSetPower`,在设备进入全工作状态(PowerDeviceD0)时启用中断和I2C接口,并初始化I2C总线,以解决快速启动时可能遇到的问题。
摘要由CSDN通过智能技术生成

Windows10新增加了一个功能:快速启动,而且默认状态是打开的,根据微软的说法,快速启动可以有效提高启动速度,快速启动等同于休眠。
控制面板——硬件和声音——电源选项——左侧选择电源按钮的功能——更改当前不可用的设置,取消启用快速启动复选框即可。
其实,快速启动的原理并不复杂,即关机时将系统内核、相关模块和驱动写入硬盘存放起来,下次启动直接加载,速度自然变快了。
当打开快速启动时,关机后再开机时win10不会完全重新加载驱动,导致初始化芯片失败,在驱动中新加一个电源管理函数,把改变电源到PowerDeviceD0 时再做一次加载驱动时要初始的芯片工作, 休眠与快启都能正常工作。

电源管理函数:DeviceDispatchSetPower,        // Power Set Power
    PowerDeviceD0  // Fully working state

void DeviceDispatchSetPower(IN PKSDEVICE Device,IN PIRP Irp,DEVICE_POWER_STATE to,DEVICE_POWER_STATE from)
{
    PDEVICE_EXTENSION devext;
    devext = (PDEVICE_EXTENSION)Device->Context;
    if( to == from )
        return;
    
    if(to == PowerDeviceD3) //low power state
    {
        KdPrint(("dispatchSetPower:low power state\n"));
        devext->_power_state = to;
    }
    else if(to == PowerDeviceD0 ) // Fully working state
    {
        devext->_power_state = to;
        KdPrint(("dispatchSetPower:Fully working state\n"));
        wrReg32(devext, (INT_BASEADDRESS + INT_EN ), 0x00000001); //enbale INTERRUPT
        wrReg32(devext, (INT_BASEADDRESS + I2C0_MASK ), 0x00000001);
        wrReg32(devext, (INT_BASEADDRESS + I2C1_MASK ), 0x00000001);
        wrReg32(devext, (INT_BASEADDRESS + I2C2_MASK ), 0x00000001);
        wrReg32(devext, (INT_BASEADDRESS + I2C3_MASK ), 0x00000001);

        init_i2c(devext,I2C0_BASEADDRESS);
        init_i2c(devext,I2C1_BASEADDRESS);
        init_i2c(devext,I2C2_BASEADDRESS);
        init_i2c(devext,I2C3_BASEADDRESS);
    }
    else
        KdPrint(("unsupported device state requested\n"));


}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值