昨日在从合肥回上海的高铁上,写了《Windows 10源代码泄露风波》的第一部分,晚上发布后,伏在书桌上竟睡着了,朦朦胧胧间,有人轻拍我肩膀,回头一看,竟是多年未见的一位好友,我赶紧请他坐下,倒一杯刚从庐山带回来的云雾茶给他喝。
一番寒暄后,我问他可否知道近日的源代码泄露风波,他点头称是。我接着追问:“仁兄可知泄露代码到底几何?”他先伸出两根手指,又把整个手掌张开。我说:“250M?”他轻轻点头。
我给他加了茶水后继续询问他可否见过泄露的文件,他从背包中掏出一本小册子,放到桌面,然后推到我面前,我见封面上写着两行字,第一行是Windows 10 Shared Source Kit(SSK),第二行是Microsoft Confidential。
我如获至宝,赶紧翻开,第一页是SSK子目录列表,分别是:
Audio
avcore
base
drivers
minkernel
nethlk
network
Tests
wlanouterloop
在The Register的报道中,作者Chris用下面这段文字描述泄露源文件的内容:
“The leaked code is Microsoft's Shared Source Kit: according to people who have seen its contents, it includes the source to the base Windows 10 hardware drivers plus Redmond's PnP code, its USB and Wi-Fi stacks, its storage drivers, and ARM-specific OneCore kernel code.”
解释和归纳如下:
PnP代码,即Plug and Play,I/O管理的核心逻辑之一。
USB和Wi-Fi设备栈。
存储驱动。
ARM处理器相关的内核代码。
结合Chris的描述看上面的目录列表,二者基本相合,而且互相补充。
我继续翻看小册子,接下来是使用tree命令产生的每个目录的详情。我先翻到minkernel部分,它是从Windows 7开始使用内核分支,字面意思是小内核,是为了解决Vista内核过度膨胀而特别裁剪的版本。从微软的公开调试符号可以看出,Windows 8和Windows 10也都是使用这个分支。因此,minkernel已经成为NT内核的别称。
在minkernel目录下,有两个子目录,分别为:
boot
ntos
浏览boot目录下的内容,可以看到著名的bootmgr和osloader,后者应该就是著名的winload的源代码。看到这些内容,我不由得发出惊叹,“这一次确实还是泄露了很重要的内容啊!”在此前泄露的NT4和Windows 2000源代码里根本没有这两部分内容,因为它们是在Vista时引入的。启动部分一向敏感,boot loader虽小,但是五脏俱全,里面仿佛一个小的操作系统。微软在这方面一直保持着比较大的领先,单凭支持双机交互式调试就足以让众多开源的boot loader无地自容。
继续看ntos部分,里面也是有两个子目录:
io
ke
第一个是著名的I/O管理器,NT内核中最复杂和最有特色的部分,著名的WDM驱动模型就在其中。第二个是内核(kernel),微观意义的内核,内核中的内核。观察这个目录中的文件清单,好多熟悉的名字,ipi(处理器间通信),trap(陷阱),callout(神秘的外调机制),cxtswap(线程切换),idle(空闲线程),flushtlb(刷新页表缓存)......里面的文件有一半是.asm后缀,明显是和硬件密切相关的汇编语言部分。
看到如此多承载底层机制的核心文件,我兴奋不已,禁不住猛拍桌子,只听哐当一响,茶杯被我打翻在地,茶水一半洒在地上,一半洒在桌子上,原来刚才做了一个梦。略微定了定神,便听老婆大喊,“把什么打翻了?这么晚了,还不睡觉?”我赶紧说没啥没啥,就来就来。
本部分到此打住,未完待续。