快科技 10 月 19 日消息,在 Windows 11 26H2 的 System32 文件夹里,kernel32.dll、user32.dll、ntoskrnl.exe 等核心文件至今沿用 MS-DOS 时代的 8.3 命名规则。
8.3 是 MS-DOS 的文件命名规则,即点号前最多 8 个字符,点号后最多 3 个字符扩展名,最长 12 个字符,且只能用 ASCII 字符,不能含空格,不能有多个点号。
MS-DOS 时代文件名全大写显示,Windows 默认不区分大小写,kernel32.dll 和 KERNEL32.DLL 是同一个文件。

至于为什么是 8 和 3,在 Windows 工作了 30 多年的工程师 Raymond Chen 曾在 2009 年博客中解释,这是 CP/M 的遗产。
CP/M 是 Gary Kildall 1974 年为早期微型计算机开发的操作系统,MS-DOS 为了兼容 CP/M 连文件名一起继承了。
有意思的是 Chen 自己也不知道 CP/M 为什么选了 8 和 3,他注意到 CP/M 目录格式里有两个保留字节,理论上可以扩展到 10.3,猜 8 只是个方便的数字。
目前 Windows 11 的 NTFS 支持最长 255 个字符的长文件名,但核心系统文件不改名 Chen 在 2007 年博客中梳理了几条实际原因。
最明显的一条是 DLL 一旦被程序链接就不能改名,程序按文件名找文件,假如微软明天把 user32.dll 改名,几十年积累的 Windows 应用全去找一个不存在的文件。
在 Windows 95 的时候,微软还不要求系统盘支持长文件名,因为部分使用漫游配置文件的企业依赖不支持长名的服务器,所以每个系统文件必须符合 8.3。
直到 Windows XP 长名成了标配,短名也没消失,Windows 会为每个长名生成短别名,如果安装程序要把 shellstyle.dll 复制到一个已有 shellstuff.dll 的文件夹,新文件大概率变成 SHELLS~2.DLL。
Chen 给出的最后一条理由最让人信服:"8.3 命名的问题都已被充分理解并可控,换成长名只会带来一整套新问题。"毕竟改 kernel32.dll 的名字比改几个页签破坏面大得多,而且不会让电脑更快或更安全。

【本文结束】如需转载请务必注明出处:快科技
责任编辑:黑白


登录后才可以发布评论哦
打开小程序可以发布评论哦