Windows 7安装在在12代之后平台中,会出现睿频不生效的问题,Canon-控大佬已提出修改BIOS并刷入的解决方案,详见ht tps://bbs.pcbeta.com/viewthread-1992659-1-8.html(教程帖)。经过艰苦卓绝的分析,本人现基于教程帖中提出的原理,提出另一种解决方法——修改acpi.sys(不需要刷BIOS)。 1. 原理分析 Intel睿频是微软驱动intelppm.sys控制的,要使睿频生效,第一需要让系统识别出CPU设备,第二需要将这个驱动安装到CPU设备上。 出现睿频不生效的情况,都有一个共同特点,就是“设备管理器”中不显示CPU设备(例如下图),即上面第一点不成立。而Windows 10中是显示的(例如下图),修改BIOS后也会显示。所以修改acpi.sys的思路就是,找到不能识别CPU设备的具体原因,针对性地修改,使系统识别出CPU设备,才能安装intelppm.sys驱动。 NT操作系统的设备树是通过枚举方式建立的,从顶部的“Microsoft ACPI-Compliant System”(驱动程序是acpi.sys)开始,每个设备先被操作系统启动,然后不断枚举出它下级设备,对下级设备重复“启动-枚举下级”的递归操作,直到所有的设备都没有下级设备。在设备管理器的“依连接排序设备”方式下可以看到这一结构。“Microsoft ACPI-Compliant System”的下级设备,是由BIOSACPI表中的DSDT表规定的,根据教程帖,从12代平台开始,DSDT表中普遍采用“ACPI0007”的Device方式定义CPU设备,取代了之前Processor方式定义,这样的定义方式,不能被Win 7 acpi.sys报告给系统。 在程序层面分析,acpi.sys对于“MicrosoftACPI-Compliant System”设备和每个枚举到的直接下级设备会建立一个DEVICE_EXTENSION结构体(详见acpi.sys PDB,还有nt5src中有XP版本作为参考),其中结构体第一个成员是Flags(标志值定义在nt5src中)。经过IDA和Windbg分析调试,结合nt5src分析,参考Win 10 acpi.sys的处理,可以得知无论Win 7还是Win 10的acpi.sys,发现采用“ACPI0007”的Device方式定义的CPU设备,都会像Processor定义的一样,设置DEV_CAP_PROCESSOR标志,记录该设备是一个CPU。导致Win 7未能上报设备的真正原因,是Win 7下在Flags中错误地设置了DEV_TYPE_NOT_PRESENT标志。Win 7 acpi.sys在ACPIGetProcessorStatus函数中,对于非Processor定义的设备类型,不能正确地处理,误认为CPU不存在,设置DEV_TYPE_NOT_PRESENT标志,进而导致在ACPIDetectPdoDevices函数中跳过已经识别到的CPU设备,在上报给操作系统已枚举到的设备时,去除了CPU设备;而Win 10 acpi.sys会正确地取消DEV_TYPE_NOT_PRESENT标志,把实际存在的CPU设备上报操作系统。 因此,在Win 7 acpi.sys的ACPIGetProcessorStatus函数中,把不符合Processor定义的2处跳转取消掉,即可使CPU设备上报到操作系统;进一步,在ACPIProcessorGetInitialApicId中也有2处跳转需要取消,确保CPU设备驱动正常运作。总共需要对acpi.sys修改4处。 2. 修改地点 基于版本号为6.1.7601.24056的acpi.sys进行修改。 第一,在ACPIGetProcessorStatus函数的F3E0和F402偏移处,跳转指令改为两个nop。 第二,在ACPIProcessorGetInitialApicId函数的3F703和3F73D偏移处,跳转指令改为两个nop。 共计修改4条指令8个字节,然后需要重新计算校验和,签名后又会重新写入签名偏移。 3. 使用方法及效果 本人没有可用证书,只能生成测试签名版本的acpi.sys,可在这里下载: ht tps://wwdk.lanzouu.com/itwmT383o09i 密码:dyes 打开测试模式,使用它替换C:\Windows\system32\drivers\下的原版acpi.sys(原版务必备份好),重启,可以识别到CPU设备,系统根据C:\Windows\inf\cpu.inf自动安装intelppm.sys驱动。如果此时出现代码37,再重启一次电脑即可。 B760m + i5-12490F运行良好,跑分正常,电压合理,效果: 4. 说明 (1) 本方法测试样本较少,有意测试的请先做好数据备份,责任自负。 (2) 修改了哪里,用文件比较工具即可判断出来。 (3) 如果觉得好用,又有可用证书,请自行对其签名,免于开启测试模式。 (4) 如果条件合适,考虑把前期测试的AC9560/ Wi-Fi 6 / Wi-Fi 6E无线网卡在Win 7中使用的相关原理公布出来。 (5) 特别感谢Canon-控大佬和SMXDIY测试组前期的辛勤分析和技术分享。
|