最新消息:

Windows 10上有多少远古代码?

学习 eben 499浏览 0评论

在 System32 下有个名叫 rasctrnm.h 的文件,正如扩展名表示的那样,是个 C 语言头文件。如果没记错,它也是部分 Windows 版本下 System32 目录下唯一一个代码文件。

根据注释可以看到这个文件 1993 年就在那里了,最后一次更新是 1993 年 11 月 4 日,也就是 Windows 3.2 公开发行前半个月,第一个用发行年命名的 Windows 版本 Win 95 发行前两年。

为 Win 3.2 设计的软件放到今天的 Win 10 上绝大多数都无法运行了,会直接提示不兼容。为什么它孤零零地被丢在 System32 里而不是和其他系统头文件放在一起将近 30 年,估计除了当初的开发者外没人知道……

作者:流清商
链接:https://www.zhihu.com/question/452556739/answer/1819451844
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:北极
链接:https://www.zhihu.com/question/452556739/answer/1819926685
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目问的是代码,那么操作系统的特性就不能算在内,比如其它回答里的“COM”文件,A盘之类的,就属于特性而非代码,不能算在内。FAT的代码微软是有公开的,这个代码显然不能用于DOS。

操作系统安装好以后,代码的大头其实是驱动和库,内核和应用占用比例不大,通常来说,只要库和驱动都还能用,厂商是懒得改的

驱动方面:

Windows内核从Win2000开始,是个分界点,之前的驱动和后来的驱动接口API明显不同,所以WIN10上能找到的改动较少的驱动,最早可以追溯到Win2000,但是这些驱动基本上都是要重新编译的,因为32位驱动跟64位系统不兼容,如果使用WIN10 32位,那么可以找到一些古老的驱动,比如FASTFAT.SYS(FAT驱动,更新不大)等,甚至一些第三方的驱动,比如FTDI串口驱动,几乎都可以做到兼容。

64位Windows驱动都是重新编译的,可以理解为“全新”的,这个“全新”可以追溯到Win Vista 64时代。

库的方面:

库的内容不像驱动那么敏感,所以,只要能用,基本上就保留原始状态,比如msvbvm60.dll,VB6的运行库,这个库是1998年发布的,属于Win98的版本,至少20多年了。msvbvm60.dll在SysWOW64里,这里是个老代码的大集合,类似的东西还有d3dx9/VC/MFC库等等,大多数文件都是十几年之前的。

我这个英文版的WIN10系统里,SysWOW64有1.5G大,里面的代码基本上都是年代久远的东西。WOW的代码,最早可以追溯到Win95,再早就不行了,因为再往前就没有32位系统了。

应用方面:

Windows用户可见的应用程序,改动还是很大的,Win10的应用程序,少数可以追溯到Win7/Vista,再早的就非常少了(notepad.exe)。


如果把范围放宽一点,把数据文件也包括在内,那么“上古数据”就会更多,比如C:\Windows\System32下的NLS文件,用于字符映射,很多都是WIN2000甚至WIN9x的东西。还有c:\Windows\Fonts下的字体文件,很轻松就能找到Win95的字体

至于图标之类的,可以看看这个:从 Windows 95 开始一直在 shell32.dll 中存在的一个大树图标是出自哪里?

如果只看数据的话,我手头能确认的,最早的东西是Windows 3.2上的字体文件

Windows 10上有多少远古代码?-2

上图列出的字体文件,在我这个Win10(2004)上还能找到,内容也完全一致(还有十几个文件,内容少量有差别的)。更早的Windows版本,我找不到安装包,也没办法尝试。

所以,Windows上的老东西其实挺多的,如果以Win10第一版作为标尺的话,纯粹Win10新开发的代码和数据,可能连1/10都不到。


说明一下:Windows还有一些中间版本,比如NT4,XP64,以及很多的server版本,因为环境限制,没办法验证,所以也不好给出结论。其实,如果做过一些Windows开发就会发现,某些版本的Visual Studio跟某些版本的Windows是绑定的,通过SDK的变化可以判断出来Windows到底有多少更改。Windows、MSDOS家族的几个重要的分界点:MSDOS 3.3、MSDOS 5.0、MSDOS 6、Win95(DOS7),WinNT4,WinXP(NT5),WinVista(NT6),Win10,包括服务器版本,其实都是跟着内核版本走的,内核大版本不变化,那么很多情况下都是小规模的重构。


作者:无人驾驶
链接:https://www.zhihu.com/question/452556739/answer/2817988844
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

很多人可能不知道多年前鼠标的接口是9针串口,后来才变成PS2,再后来是USB。如果今天你插一个古老的串口鼠标,win10,1依然支持。

追更,几日前随手怼了微软一小下,没想到有这么多做嵌入式的朋友遇到串口鼠标的困扰。其实这个问题也是我在工作中发现的。因为自己的串口设备自动定时每秒发送数据到Windows 10 iot, 并且串口设备启动速度远快于Windows,当Windows启动开始检测附属器件时,就会在串口收到数据,他这个古老的功能会把咱的串口设备识别为串口鼠标。然后Windows的鼠标指针就乱了,因为咱串口设备不停地发数据,对于鼠标来说,这些是乱码,指针会跳个不停。

解决方法可以是修改注册表,停用串口鼠标。也有网友在下面评论了,也可以删掉相应驱动,应该也行。自己感觉修改注册表是稳妥和正规的做法。

做工控使用Windows10,11还有很多不同的坑,也欢迎大家交流

____________

看到大家对这个串口鼠标的事这么有感触,我再补充一点,供大家在工作中参考。上面说到了Windows在特定情况下,会把串口设备识别为鼠标,如果我们这时设计的是一个带触摸屏的设备,那这个触摸屏工作也就会异常,通常的表现是光标就飞了,触点位置奇特。如果大家在工作中遇到触摸屏异常,同时串口又接有外设的情况下,别忘了想一下可能是串口鼠标这个老 在作怪。


作者:何松杰
链接:https://www.zhihu.com/question/452556739/answer/1819519106
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

根据大佬指正,这并非代码而是特性。

我之前猜测实现代码没有换过,是我的问题,在这里我先道个歉。

但可以确定的是,这个相关功能的代码也有一段时间没更新了,只是没有文中说的那么久。


发现大部分的人觉得win95就很古老了,只能说有些人还是too young。

有一个很明显的上古代码,你现在可以尝试在任何一个Windows系统下创建一个名为AUX的文件/文件夹。你就会发现它说:The specified device names is invalid.(指定的设备名是无效的)

在今天的Windows中,你仍然不能创建名为AUX,CON,PRN,NUL等文件名。

那么你可能会好奇,为什么这些东西不能被创建呢?为什么是“设备名”呢?

足够有趣的,如果你用Linux访问NTFS的硬盘,你会发现你可以正常的创建这些文件,所以这是在Windows系统上被阻拦的而非被文件系统阻拦的。

这些,如提示的那样,是一种叫做“设备文件”的东西,这些文件已经被Windows指定了。(比如PRN是打印机,CON基本上就是键盘,Linux程序员能够把设备文件吹上一整天,我就不吹了,总之你需要知道的就是这些东西会被其他软件当作文件使用)

而你不能在Windows 10上创建这些文件的原因,可以追溯到MS-DOS的年代。那时候只有一个目录,所以如果软件想要用设备文件的时候,它们不需要给出文件夹地址,因为它们肯定在同一个文件夹,这样程序员在写的时候,就会把这些文件当作一般的指令一样处理。

然后就是我们大家都知道的东西,MS-DOS支持了极为先进的——文件夹。但这带来了一个问题,软件运行的目录可能不在有设备文件的文件夹。这样就意味着他们要开始给定文件的目录才能访问这些文件了(比如原来直接AUX的现在需要输入C:\Dev\AUX)。但是很明显,新版的DOS不可能直接把老的软件的兼容性破坏了,而且因为新软件可以在任何目录下执行,所以所有的文件夹下都会被映射上这些设备文件。

没错,你不能创建AUX文件的原因比Windows的历史还早,不知道够不够远古。


作者:为啥已重置
链接:https://www.zhihu.com/question/452556739/answer/1813891214
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

shell32.dll全是远古图标。比如那棵树。出vista的时候就有人骂,到了win10还没删全

安装程序都是用的vista马甲。甚至还有win7家庭版的那种aero效果。

计算机管理,照搬的vista的!就连一个文字都没变!

自带一个菜鸡zip,压根不顶用,好像xp就有(因为之前的版本一直用winzip,从来没注意,有一次装了rtm,没装任何软件,打算解压个zip的时候知道了)

控制面板可就氵了。全是win7/vista的图标

programfiles和x86的,win7历史遗留。mediaplayer说砍不砍,每次打开WMP都给你推荐WMP,打开音乐应用,又告诉你音乐建议用于win10

vbs可还行,win95/98年代的vbs病毒 ,居然能在win10下完美运行。还有wscript.exe的图标谁注意过

注册表,谁翻过,全是vista框架

syswow64几乎全是屎山,md5都一样。就是build的时候改了个修改时间

年代久远的驱动。吓死我了

驱动文件储存在哪里所有人都应该知道。然而二十多年过去了……….

cmd一堆bug。win+r输入cmd,然后瞎复制粘贴回车,过一会你会发现你的用户文件夹里被一些0

kb的文件占满了。。。。vista下亲测。WIN10也亲测

资源管理器。这都不用我说了吧。都是vista马甲

windows文件夹,看看图标你就知道。根目录的exe,有哪个文件vista没有?

windows照片库,vista第一次出现,win7年代就砍掉了。win10居然还有。怒赞。

半死不活的ie11

打印机图标

applicationdata。xp遗传。说是老软件兼容,可是谁会在win10上跑20年前的软件?再说你留下就留下,applicationdata还是个死循环!我搜索个文件,你给我卡半天。

说道搜索了。vista的搜索照搬过去很简单。为什么?懒得改!

dwm.exe

winsxs。从xp,路过vista,经过win8,再到win10.

复制文件时默认路径是a盘[这个我在给vista折腾驱动的时候就发现了]

重点来了!2000年代的远古文件夹来了!

Downloaded Program Files和Offline Web Pages。还是win2000的图标!真的佩服微软!!!

然而,更氵的东西来了!

system32下的PacerCnt.h,第三行清楚的写着

Copyright (c) 1998-1999 Microsoft Corporation

代码:

/*++

Copyright (c) 1998-1999 Microsoft Corporation

Module Name:

    PacerCnt.h

Abstract:

    Offset definition file for extensible counter objects and counters

    These "relative" offsets must start at 0 and be multiples of 2 (i.e.
    even numbers). In the Open Procedure, they will be added to the 
    "First Counter" and "First Help" values for the device they belong to, 
    in order to determine the absolute location of the counter and 
    object names and corresponding Explain text in the 

registry

.

    This file is used by the extensible counter DLL code as well as the 
    counter name and Explain text definition file (.INI) file that is used
    by LODCTR to load the names into the registry.

Revision History:

--*/

// PerfMon objects
#define PSCHED_FLOW_OBJ                             0
#define PSCHED_PIPE_OBJ                             2

// Flow counters
#define FLOW_PACKETS_DROPPED                        4
#define FLOW_PACKETS_SCHEDULED                      6
#define FLOW_PACKETS_TRANSMITTED                    8
#define FLOW_AVE_PACKETS_IN_SHAPER                  10
#define FLOW_MAX_PACKETS_IN_SHAPER                  12
#define FLOW_AVE_PACKETS_IN_SEQ                     14
#define FLOW_MAX_PACKETS_IN_SEQ                     16
#define FLOW_BYTES_SCHEDULED                        18
#define FLOW_BYTES_TRANSMITTED                      20
#define FLOW_BYTES_TRANSMITTED_PERSEC               22
#define FLOW_BYTES_SCHEDULED_PERSEC                 24
#define FLOW_PACKETS_TRANSMITTED_PERSEC             26
#define FLOW_PACKETS_SCHEDULED_PERSEC               28
#define FLOW_PACKETS_DROPPED_PERSEC                 30
#define FLOW_NONCONF_PACKETS_SCHEDULED              32
#define FLOW_NONCONF_PACKETS_SCHEDULED_PERSEC       34
#define FLOW_NONCONF_PACKETS_TRANSMITTED            36
#define FLOW_NONCONF_PACKETS_TRANSMITTED_PERSEC     38
#define FLOW_MAX_PACKETS_IN_NETCARD                 40
#define FLOW_AVE_PACKETS_IN_NETCARD                 42

// Pipe counters
#define PIPE_OUT_OF_PACKETS                         44
#define PIPE_FLOWS_OPENED                           46
#define PIPE_FLOWS_CLOSED                           48
#define PIPE_FLOWS_REJECTED                         50
#define PIPE_FLOWS_MODIFIED                         52
#define PIPE_FLOW_MODS_REJECTED                     54
#define PIPE_MAX_SIMULTANEOUS_FLOWS                 56
#define PIPE_NONCONF_PACKETS_SCHEDULED              58
#define PIPE_NONCONF_PACKETS_SCHEDULED_PERSEC       60
#define PIPE_NONCONF_PACKETS_TRANSMITTED            62
#define PIPE_NONCONF_PACKETS_TRANSMITTED_PERSEC     64
#define PIPE_AVE_PACKETS_IN_SHAPER                  66
#define PIPE_MAX_PACKETS_IN_SHAPER                  68
#define PIPE_AVE_PACKETS_IN_SEQ                     70
#define PIPE_MAX_PACKETS_IN_SEQ                     72
#

define

 PIPE_MAX_PACKETS_IN_NETCARD                 74
#define PIPE_AVE_PACKETS_IN_NETCARD                 76

还有字体文件!!!

对了关于这个con,aux,nul等东西,应该算吧。

话说aux是个空调的品牌阿,微软跟aux有仇马


作者:匿名用户
链接:https://www.zhihu.com/question/452556739/answer/1817267118
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

cmd.exe 几乎无改进(改的是conhost),但是引入了新的PowerShell

dwm.exe 屎山毫无疑问。内存泄漏大户。

mstsc.exe 远程桌面连接,显而易见。(修改:评论区纠正,这个软件外观变化很小,但是与dx12等api的适配还是很勤快的)

notepad.exe 记事本,适配不少,但依然显而易见。与之对比的当然是画图mspaint了,他俩现在应该都被模块化了。不过有一说一,这个notepad虽然简陋,但是真能打。(win11的新记事本可是真烦人,低配电脑用着都卡)

打开组策略,看看里面有多少“适用于Windows2003”(评论区纠正:组策略是适用于域里所有计算机的,但不同计算机版本可能不同)

磁盘清理:适配了delivery optimization。呵呵?

ie的内核ieframe.dll,显而易见。

winhlp32.exe(这个大退步,断网看不了帮助,而且帮助大概也没什么意义了)

mfc相关(我连vc2015都要自己点开exe安装,mfc这种老古董依然预装)

vbscript相关(这玩意地位跟cmd其实差不多,没啥大必要更新)

zip支持(zip是个格式,里面的算法可以改,但是windows的zip只支持最普通的,还容易乱码)

tablet pc相关,还是xp时代的图标(实际上现在触屏电脑也基本用不上那些东西,比如校准屏幕,越校准越偏)

弹出磁盘时莫名占用(NTFS的特性吧),我猜xp时代也有这问题

我在翻system32,翻一半不想翻了。

微软能把这么大一坨东西让他正常地跑在无数电脑上,牛逼。


好多赞哇我感觉我在抖机灵

话说,Windows Vista是个节点,底层几乎重写了,所以我说的一些都是不偏底层的。dwm就是Vista时代的东西,不算太远古,但实在太可恶了,可能这是大家点赞的原因吧

转载请注明:落伍老站长 » Windows 10上有多少远古代码?

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址