Windows 95 1992 年 7 月 20 日版本
| Windows 95 的版本 | |
| 操作系统系列 | 16 位 Windows |
|---|---|
| 内核版本 | 3.10 |
| 内部版本号 | 07200022 |
| 体系结构 | x86 PC/AT(16 位) |
| 编译日期 | 1992 年 7 月 20 日 |
| 关于对话框 | |
Windows 95 1992 年 7 月 20 日版本或 Build 07200022 是 Windows 95 最早确认和可用的版本,比 Chicago 功能规范文档早 2 个多月。[1]它最初于 1992 年 9 月 18 日作为贴错标签的 Windows for Workgroups 3.1 版本泄露,后来于 2024 年 6 月 23 日被重新发现并重新上传。[2]
此版本与 Windows for Workgroups 3.1 的现代版本相对相似,尽管它包含许多用户体验更改,例如新的 3D 控件样式、新应用程序和现有应用程序的更新版本。与 Windows 95 的后续版本不同,它要求已安装 MS-DOS 版本,且不包含任何 Win32 支持,尤其是早于最早公开发布的 Win32s 测试版。
内部版本号
此版本使用了一种不寻常的版本号格式,其中前四位数字是编译版本的日期。因此,内部版本号 07200022 表示内部版本是在 7 月 20 日编译的。后四位数字可能是编译此版本的时间,对应为 00:22。这与可用副本中看到的文件修改时间匹配,尽管 Microsoft 通常会篡改文件修改时间,因此它不应被视为权威。第二部分可能仍是一个传统的连续内部版本号。
在版本号增加到 4.0 后,这种格式似乎仍在继续使用;Windows for Workgroups 3.11 Build 026 包括从 Chicago 和/或 Cougar 版本向后移植的多个组件,包括 SVGA256.DRV。版本号为 4.00.08310026 的 DRV(Windows for Workgroups 3.11 的更高版本包括此组件的更新版本,源自后来的 Chicago 版本)。
与各个项目的关系
此版本是否确实是作为 Chicago 项目的一部分编译的,还是一个最终被 Chicago 取代的较小项目,目前仍然有争议。此版本是在 Chicago 功能规范完成前两个多月编译的,[1]尽管此项目已经在进行中,正如1992年6月发布的一封讨论用户界面更改计划的内部电子邮件所显示的那样,[3]在此版本编译前一个多月。特性规范中提到的某些特性,例如通用的 256 色 SVGA 驱动程序,已在此版本中实现。
此版本的编译和打包方式与常规的 Windows for Workgroups 3.1 版本类似,这导致它在最初泄露时被错误地标记为一个版本。可能由于这个原因,此版本在大多数情况下在标准的独立 MS-DOS 上运行良好。但是,允许在 Windows 下运行 MS-DOS 应用程序的 WinOldAp 模块依赖于由 Cougar(32 位 DOS 内核项目)实现的功能,因此在此版本副本下会损坏。可能缺少 Win32 支持,因为它依赖于 Cougar 中添加的功能,而这些功能也不存在。
1992 年 1 月发布的 Win32s 早期版本的 Win32 DLL 包含在版本中。但是,它未使用,因为版本根本不包含 Win32 实现。此库实际上在 Build 58s 的 KERNEL32.DLL 内的死代码中被引用,尽管它在此版本中不存在。这仍然表明,在 Chicago 实现的 Win32 子集 Win32c 确实是从 Win32s 派生而来的。
新增功能和更改
用户界面
此版本中的用户界面已重新设计,使其三维项目更肉眼可见。其他各种用户界面元素已恢复其粗体字体样式,并已恢复为常规字体状态。
文件管理器(File Manager)
此版本中有两个版本的文件管理器——未修改的 Windows 3.1 版本 WINFILE.EXE 和新的 FILEMAN.EXE。添加到此版本的文件管理器中的主要新功能是它具有文件,文件夹和驱动器的右键单击菜单(后来成为 Windows 95 用户界面指南的一部分),允许用户执行各种特定于上下文的文件操作,例如移动、复制、删除,重命名和查看文件属性,以及将文件扩展名与应用程序关联。
新版本的文件管理器还会在格式化软盘时将不同的启动扇区写入软盘。它还具有其他字符串 “Moving...(移动...)”、“Copying...(复制...)”和“Deleting...(删除...)”这似乎还没有在代码的任何地方使用。
项目/计划管理器
虽然在其可执行文件标题中称自己为“Windows Item Manager(Windows 项目管理器)”,但它似乎是一个非常简单的程序管理器替代方案。用户可以将项目添加到组窗口并打开 .GRP 文件由程序管理器创建。然而。项目管理器生成的 .GRP 文件不能由项目管理器加载。
光栅
此版本包括基于 Microsoft 基础类库开发的画笔应用程序的重新设计版本。与画笔相比,光栅彻底改变了用户体验,具有更小的工具按钮和更广泛的调色板中的颜色排列。控制光栅中的所有设置是通过菜单栏完成的,这与后来的版本不同,在后续版本中,某些设置与工具按钮本身捆绑在一起。它是一个 16 位应用程序,仍然使用 Windows 3 样式的通用控件,尽管 UI 是 Windows 95 Build 89 及更高版本的画图中的早期版本。
任务列表
包括 Windows 95 任务列表的早期版本,取代了 Windows 3.x 版本。此版本为每个应用程序添加了应用程序图标和菜单栏,但是某些选项(例如结束任务和运行框)不起作用。
控制面板
- “Metrics(指针)”控制面板选项存在(
METRICS.CPL),但默认情况下未安装。它类似于 Build 58s 中的版本。 - “桌面”控制面板选项已被删除,取而代之的是壁纸选择器(
WALL.CPL)和屏幕保护程序控制面板选项,类似于 Windows 3.0 with Multimedia Extension 1.0(SSDLG.CPL)中的选项,两者默认情况下均未安装。
Drag and Drop Printing(拖放打印)
Drag and Drop Printing(拖放打印)是一个程序,它为系统上安装的打印机创建一个图标,并允许你通过在它们上面拖动一个文件来打印。双击此图标可打开打印机的配置 UI。如果拖动无法打印的文件,它会将自己称为“Print Dropper(打印滴管)”。
WinOldAp
此版本副本附带 WINOA386.MOD 一个版本,此版本依赖于作为 Cougar(32 位 DOS 内核项目)的一部分实现的功能。因此,在 386 增强模式下运行 MS-DOS 应用程序会损坏,启动一个应用程序将导致错误。
此可执行文件包含窗口模式下工具栏的资源,后来在 Build 58s 中观察到了这一点。窗口模式下的 TrueType 字体支持和“面向流的剪切和粘贴”,两者都在芝加哥特性规范中被提及为 Cougar 的改进,目前也在进行中。WINOA386.MOD 的可执行描述将“WIN386”替换为“DOS386”,这一更改也延续到了 Windows 95 的后续版本。
Cougar 依赖性
与 Windows for Workgroups 3.1 Build 014e 相比,此版本中的 WINOA386.MOD 在其初始化函数(cseg02:8099)中具有额外的代码,而此代码在 Build 014e(cseg02:0049)中不存在。
值得注意的是,此版本中包含的版本调用了 WSHELL 虚拟设备驱动程序,此驱动程序在开发 Cougar 期间从 SHELL VxD 中分离出来,以期待独立的 32 位 MS-DOS 版本。[4]它还使用一个新函数来通过其名称而不是 ID 获取 VxD API,并检查版本号 3.20 而非 3.10。此外,随附的用于 WINOA386 的 VGA DOS 模式视频驱动程序 VGA.3GR 会检查 VDDVGA 版本号 3.11 而非 3.10。
对 Windows for Workgroups 3.1 Build 014e WINOA386.MOD 反编译
; 014e cseg02:0166 mov ax, 1683h cseg02:0169 int 2Fh ; - Multiplex - MS WINDOWS - 3+ - GET CURRENT VIRTUAL MACHINE ID cseg02:0169 ; Return: BX = current virtual machine (VM) ID cseg02:016B cmp bl, 1 cseg02:016E jz short running_in_first_vm cseg02:0170 cseg02:0170 error: cseg02:0170 mov ax, 6 cseg02:0173 cseg02:0173 error_2: ; ... cseg02:0187 running_in_first_vm: ; CODE XREF: sub_6A89+125↑j cseg02:0187 mov bx, 17h ; vxd id: SHELL cseg02:018A mov ax, 1684h cseg02:018D int 2Fh ; - Multiplex - MS WINDOWS - GET DEVICE API ENTRY POINT cseg02:018D ; BX = virtual device (VxD) ID, ES:DI = 0000h:0000h cseg02:018D ; Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API cseg02:018F mov word ptr g_shell_api, di cseg02:0193 mov word ptr g_shell_api+2, es cseg02:0197 cmp g_shell_api, 0 cseg02:019D jz short error cseg02:019F mov edx, 0 cseg02:01A5 call g_shell_api cseg02:01A9 jb short error cseg02:01AB cmp eax, 30Ah ; version number 3.10 cseg02:01B1 mov ax, 0Bh cseg02:01B4 jnz short error_2
对 Build 07200022 的 WINOA386.MOD 反编译
cseg02:09A6 mov ax, 1683h cseg02:09A9 int 2Fh ; - Multiplex - MS WINDOWS - 3+ - GET CURRENT VIRTUAL MACHINE ID cseg02:09A9 ; Return: BX = current virtual machine (VM) ID cseg02:09AB cmp bl, 1 cseg02:09AE jz short running_in_first_vm cseg02:09B0 cseg02:09B0 error: ; CODE XREF: sub_8099+103↑j cseg02:09B0 ; sub_8099+15B↓j ... cseg02:09B0 mov ax, 6 cseg02:09B3 cseg02:09B3 error_2: ; ... cseg02:09C7 running_in_first_vm: ; CODE XREF: sub_8099+125↑j cseg02:09C7 xor bx, bx cseg02:09C9 mov ax, seg dseg03 cseg02:09CC mov es, ax cseg02:09CE assume es:dseg03 cseg02:09CE mov di, offset aWshell ; "WSHELL " cseg02:09D1 mov ax, 1684h cseg02:09D4 int 2Fh ; - Multiplex - MS WINDOWS - GET DEVICE API ENTRY POINT cseg02:09D4 ; BX = virtual device (VxD) ID, ES:DI = 0000h:0000h cseg02:09D4 ; Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API cseg02:09D6 mov word ptr g_wshell_api, di cseg02:09DA mov word ptr g_wshell_api+2, es cseg02:09DE cmp g_wshell_api, 0 cseg02:09E4 jz short error cseg02:09E6 mov bx, 17h ; vxd id: SHELL cseg02:09E9 mov ax, 1684h cseg02:09EC int 2Fh ; - Multiplex - MS WINDOWS - GET DEVICE API ENTRY POINT cseg02:09EC ; BX = virtual device (VxD) ID, ES:DI = 0000h:0000h cseg02:09EC ; Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API cseg02:09EE mov word ptr g_shell_api, di cseg02:09F2 mov word ptr g_shell_api+2, es cseg02:09F6 cmp g_shell_api, 0 cseg02:09FC jz short error cseg02:09FE mov edx, 0 cseg02:0A04 call g_wshell_api cseg02:0A08 jb short error cseg02:0A0A cmp eax, 314h ; version number 3.20 (!!!!) cseg02:0A10 mov ax, 0Bh cseg02:0A13 jnz short error_2
Windows Memory Viewer(Windows 内存查看器)
安装媒体上存在一个名为 Windows 内存查看器(Windows Memory Viewer,WINMEM.EXE)的应用程序,但是它运行所需的驱动程序 MEMINFO.386 不是。通过修补应用程序以不查找有问题的驱动程序,它可以成功运行。 It can be patched by changing byte 75 to EB at offset 0x3B30.
256 色通用 SVGA 驱动器
此版本包括 SVGA256.DRV,功能规范中提到的通用 256 色超级 VGA 驱动器。
MS32EM87
此版本包含一个完全没有使用的 MS32EM87.DLL,它是使用旧的 NT Build 196 标头格式的 PE(尽管第一部分标头已归零)。顾名思义,它是一个 Intel 80387 浮点模拟器;导出符号 _Ms32KrnlCbDataSize 和 _Ms32KrnlHandler,并从 MS32Krnl 按序号导入两个函数。包括 CodeView 符号;可执行文件从两个模块链接:\mrt32\emulator\objs\emdos32.obj 和 \mrt32\emulator\386\emulator.asm。
来自 Build 58s 的 KERNEL32.DLL 中未引用的死代码将尝试加载 MS32EM87.DLL,这在此版本中不存在。
此组件似乎来自 Win32s 的早期版本(PE 版本时间戳为 Thu Jan 09 1992 05:32:23 GMT+0000);Windows NT 3.1 Build 340 的 SDK 中包含的 Win32s 构建将其重命名为 W32SEM87.DLL 并将 DLL 导入到 W32SKRNL.DLL;Win32s 的后续版本完全删除了此文件。
新系统 API
KERNEL
实现系统功能,使用 READPRIVATEPROFILESTRUCT 和 WRITEPRIVATEPROFILESTRUCT KRNL286.EXE 函数将结构写入 INI 文件(这些函数在标准模式 KRNL286.EXE 中不存在,实际上未在 Windows for Workgroups 3.1 Build 014e 中修改,可能表明在此版本时已计划删除标准模式 Windows)。
GDI
GDI.EXE 特性规范中提到了新的导出:PolyBezier、PolyBezierTo 和 CreateDibSection。
USER
USER.EXE 功能规范中提到了一个新的 DrawFrameControl 导出。
SHELL
SHELL.DLL 有一个新的 LOCATEHOOKPROC 导出。
Bug
由于此版本处于开发的早期阶段,因此此版本中存在一些 bug。
网络
在此版本中,网络功能存在相当大的问题,因此系统可能会在启动时崩溃。建议在 SYSTEM.INI 中删除 [386Enh] 部分的网络部分(network 部分),或以标准模式启动以避免加载有缺陷的虚拟设备驱动程序。
屏幕保护程序
- 尝试配置或测试“空白屏幕”屏幕保护程序将导致小程序中出现错误,但是,如果之后单击“忽略”,它将执行预期的操作。
- 关闭小程序会使控制面板崩溃。
MS-DOS 应用程序支持
尝试在 386 增强模式下打开 MS-DOS 提示符或任何其他 DOS 应用程序将失败,并显示“Windows not set up correctly. Run the Windows Setup program again or run Windows in standard mode.(Windows 未正确安装。再次运行 Windows 安装程序或以标准模式运行 Windows。)”错误消息。这是由于此模式(WINOA386.MOD)的 WinOldAp 模块期望在 Cougar 下运行并调用此版本中不存在的虚拟设备驱动程序引起的。
图形
- 在高于 256 色的颜色模式下,Windows 将报告内存不足,因此会将程序管理器中的大多数图标显示为黑框。
- 在 16 色模式下,Windows 安装过程中的标题栏字体将是 Fixedsys 而不是 Microsoft Sans Serif。
应用程序
- 尝试在此版本上运行 Paging Heap Viewer(分页堆查看器)时,将抛出一般保护错误(General Protection Fault)。
- Windows 内存查看器中的分页统计信息将不起作用,可能是由于缺少
MEMINFO.386所致。
图库
-
启动屏幕
-
时钟
-
文件管理器(
FILEMAN.EXE) -
项目/计划管理器
-
光栅
-
任务列表(窗口列表模式)
-
任务列表(任务列表模式)
-
Windows 内存查看器常规信息
-
Windows Heaps Viewer(Windows 堆查看器)
-
控制面板
-
屏幕保护程序
-
墙纸
-
指针
-
Winver
安装程序
-
初始安装程序提示
-
安装选项
-
安装程序
-
验证信息
-
打印机安装
-
网络适配器安装
-
取消网络适配器安装提示
