塔斯娱乐资讯网

Windows XP退役多年,可它“特别能跑老软件”的名声一直没散。 最近外媒W

Windows XP退役多年,可它“特别能跑老软件”的名声一直没散。
最近外媒Windows Latest翻出一段旧事,直接点破了背后的门道:微软当年,偶尔会“骗”一下老程序。
这事得从2003年说起,微软工程师Raymond Chen就介绍过XP的兼容机制。
系统把修复信息存在C:\WINDOWS\AppPatch目录里,用的是后缀为.sdb的二进制数据库,主文件叫Sysmain.sdb。
XP刚发布时,这份数据库里大约已经装了200项兼容性修复。
它的聪明之处,可以拆成三点来看。
第一点,识别很精细。
系统不是光看一个.exe文件名就下判断,而是结合文件大小、校验和、版本、日期一起比对。
同一款软件,1.0版有问题就只修1.0,2.0已经正常就不碰,避免误伤。
第二点,处理很克制。
匹配上之后,系统启用一层叫Shim的“垫片”,夹在程序和Windows API之间。
它能改程序传进来的参数,也能改系统返回的结果,软件本身不用动,整个Windows也不用改。
第三点,必要时会“撒谎”。
有些老程序开机先查系统版本,不是指定版本就罢工。
于是就有了Win98VersionLie:电脑跑的明明是XP,程序一问“你是什么版本”,得到的答案却是Windows 98。
还有更夸张的EmulateHeap,直接给老程序复刻一套Windows 95的内存管理方式。
早年模拟城市会读取已释放的内存,微软干脆让Windows 95识别到它就保留旧行为。
微软为什么肯花这么大劲?
原因很现实:对企业来说,一个关键软件跑不起来,就是升级Windows的拦路虎。
很多公司都有一个内部开发的老程序,当初写代码的人可能早就离职了。
每多一个跑不动的软件,就多一个用户不愿升级的理由。
这份数据库也不是一锤子买卖。
2011年4月的一次更新里,XP SP3的Sysmain.sdb被替换,文件大小达到1,206,508字节,约1.2MB。
离XP首发已近十年,微软还在往里加规则。
说到底,所谓“骗术”不是取巧,而是一种务实的工程智慧:与其让老软件彻底死掉,不如在系统这头替它兜住。