Windows NT 3.1 Build 196

来自 WinStory Wiki
跳转到导航 跳转到搜索
1.196
Windows NT 3.1 的版本
桌面和程序管理器
操作系统系列Windows NT 系列
内核版本3.0
NT 版本Windows NT 1.0
内部版本号196
体系结构x86
编译日期1991 年 9 月 17 日
工作于
86Box
PCem
VirtualBox
QEMU
关于对话框

Windows NT 3.1 Build 196 是 Windows NT 3.1 的早期版本,它于 1991 年 9 月中旬编译并发送给有限数量的开发人员,作为 1991 年秋季 COMDEX 版本之前的试用版。[1]与 COMDEX 版本相比,此版本的稳定性明显较差,即使在打开新窗口等常见任务中也容易挂起。许多挂起是由系统在断言条件不满足后中断调试器引起的。它对其引导文件的碎片也很敏感,如果引导加载程序没有连续存储,系统会在引导时冻结。

与后来的版本相比,此版本有几个不同之处,例如带有原始双引导菜单的旧引导加载程序,支持在与 NT 相同的磁盘上安装 MS-DOS 或 OS/2、可移植可执行文件格式的原始版本,或者缺少自托管安装程序。根据版本随附的文档,这也是首批实现安全性的版本之一。此系统已经具有特权用户和非特权用户的概念,特权用户能够执行运行 CHKDSKFORMAT 等任务,这些任务需要直接磁盘访问。奇怪的是,登录屏幕包括一个“特权”复选框,尽管它似乎没有表现出任何明显的变化。

此版本早于 Windows 3.1 Build 026034f 引入四色 Windows 标志徽标,并使用这两个版本中的大型圆形窗口图形代替。但是,光盘打印包含的徽标与 1991 年 8 月 Windows 3.1 Build 043d 中的“关于”对话框使用的徽标相同,这表明 NT shell 最后集成上游更改是在初夏。此版本也与其品牌的其余部分不一致,因为它在配置文件中标识为“NT 1.0”,在桌面水印上标识为“NT 32 位 Windows”,在引导时标识为“NT-386”,在打印管理器中标识为“NT Windows”,在命令提示符中标识为“Windows NT Version 3.2”。

2018 年 9 月,BetaArchive 成员 ReflectiaX 首次展示了包含此 checked/debug 版本的光盘图片。[2]他们后来在 2020 年 12 月获得了这张光盘,并将其内容上传到 Internet Archive。[3]

系统要求

根据 README.TXT,此版本需要:

  • 使用 80386 或 80486 处理器的 Compaq 计算机。
    • 尚不支持 MCA 计算机(例如 IBM PS/2)。
  • 至少 10MB 内存。
  • 至少 12MB 的可用空间。

尽管官方要求使用 Compaq 计算机,但此版本可以安装在任何具有 80386 或 80486 处理器的计算机上。

安装程序

此版本不包含任何安装实用程序,而是依赖于批处理文件将系统文件复制到硬盘并将引导加载程序写入引导扇区。此过程需要预装的 MS-DOS(版本 3.1 或更高版本)或 OS/2 1.21 或 1.3 的副本。安装 DOS 或 OS/2 的引导分区必须是 ATA/IDE 硬盘上的 FAT 分区,而任何其他分区也可以是 HPFS 和 SCSI 磁盘上的 FAT 分区。对于 DOS 和 OS/2,CHKDSK.EXE 应位于 %PATH% 变量中列出的目录中。对于 DOS,DEBUG.EXE 也必须通过 %PATH% 访问,因为它用于安装引导加载程序。

此光盘包含设计用于安装在 MS-DOS 3.1 或更高版本旁边的 SETUP.BAT 文件,以及设计用于安装在 OS/2 1.2 和 1.3 旁边的 SETUP.CMD。通过切换到 CD 驱动器并在命令提示符下键入 setup i386 来启动安装。将 mstools 添加到命令中还将安装开发人员工具。在 OS/2 下,安装程序还接受 newdbg 参数来安装新的基于 OS/2 的调试器和相应的内核,但是,它在此版本中不起作用。

安装此版本后,安装程序还会运行 CHKDSK 以检查启动文件是否已存储在连续块中。如果不是,则需要对启动驱动器进行碎片整理才能启动到 NT。

Super VGA 支持

在兼容的视频卡[a]上,通过将 C:\NT\DLL 中的默认 VGA.DLL 驱动程序替换为同一目录中的 VGA800.dll 并重新启动,可以实现 16 色 800×600 分辨率。该驱动程序似乎使用一种非标准方式通过直接设置视频卡寄存器来切换到分辨率,这已被确认适用于多个仿真器,但是,目前尚不清楚它是否在真实硬件上运行或支持哪些卡。VirtualBox(可能还有其他虚拟机管理程序)与驱动程序不兼容,提到的文件替换将导致启动后屏幕输出损坏。

声音

此版本包括一个 Sound Blaster 驱动程序(SOUND.SYS),以及要播放的示例波形文件。它需要 I/O 端口 0x260(在内核中硬编码)和 IRQ 7(在驱动程序中硬编码)上的 Sound Blaster 1.0 或 1.5(DSP 版本等于 2.0)。在 Build 297.1 之前,卡的参数是不可配置的。

网络

内核尝试加载各种网卡驱动程序,但实际上只包含一个:ELNKII.SYS,用于 3Com EtherLink II。

应用程序

与 1991 年 10 月的版本相比,此版本缺少当时经典 Windows 通常包含的几个标准实用程序和附件。包括程序管理器文件管理器控制面板剪贴板查看程序记事本日历、时钟、翻转棋纸牌扫雷。这些应用程序在功能上接近其 Windows 3.0 或当代 Windows 3.1 预发布版本。这表明他们没有始终如一地与 Windows 3.1 源代码树保持同步。此外,还包括一个特定于 Windows NT 的命令提示符(CMD.EXE),它基于其 OS/2 对应项。

此版本的开发人员工具包括多个演示应用程序,其中许多应用程序取自 Windows 3.0 SDK。与以后的版本不同,没有提供二进制文件,因此需要首先通过启动 Win32Dev 快捷方式、更改为 C:\NT\MSTOOLS\SAMPLES 并运行 MAKEALL.CMD 来生成它们。在构建过程之后,每个子目录中都应存在一个已编译的可执行文件。

值得注意的应用包括:

  • 打印管理器,已针对 NT 从头开始重建,旨在替换 Windows 3.x 中的原始打印管理器和打印机控制面板。此版本在标题栏中称自己为“NT 打印管理器(NT Print Manager)”,并使用 Windows 3.0 中的打印管理器图标。
  • WINBez,它演示了 NT 的图形功能。 与 10 月版本中的版本相比,它更原始,并在关于框中称自己为“Kent's Window Test Application”。
  • Performance Meter(性能计)。与 10 月版本没有明显的区别,但奇怪的是,此版本中的版本报告为 1.1,而 10 月版本中的版本报告为 0.5。
  • PlaySnd,用于测试操作系统的声音功能。此应用程序类似于 1991 年 10 月版本中的 PlayIt。
  • Mltithrd 展示了在同一进程中同时执行多个线程的能力。这与 1991 年 10 月版本中的版本大致相同。
  • Simple,只需在执行时将“Win32,it's happenin'!”打印到控制台。

体系结构差异

此版本与大多数后来的 Windows NT 版本相比有几个有趣的体系结构差异。

引导加载程序

此版本使用较旧的引导加载程序,它明显比后续版本中引入的 NTLDR 更原始。值得注意的是,它要求其所有阶段都连续存储,否则系统将在启动时挂起。引导扇区似乎是从 OS/2 中获取的,并加载 OS2LDR,默认情况下,OS2LDR 包含一个基本的双引导菜单。此版本支持使用 OS/2 1.2-1.3 或 MS-DOS 进行双引导,后者似乎是在此版本发布前不久引入的。加载程序不会尝试检测其他操作系统,而是依靠安装程序来安装正确的加载程序变体:基于 DOS 的安装程序复制 OS2LDR.DOS,而基于 OS/2 的安装程序复制 OS2LDR.DUL。当双引导时,OS/2 变体只是链式加载原始 OS2LDR(现在重命名为 OS2LDR.OS2),而 DOS 变体复制了 DOS 引导扇区的行为。

实际的 NT 加载程序存储在 OS2LDR.NT 中,它会显示一个 80x50 的文本模式屏幕,灰色背景上有黑色文本,打印出版本信息,并在加载内核时显示一个由点组成的进度条。在此阶段,引导加载程序将自己标识为“PDK Bootloader v1.9”,版权日期为 1990 年,“PDK”部分周围有奇怪的间距,表明此字符串可能在发布前被匆忙编辑。加载内核后,它会执行基本检查以确保内核适用于正确的体系结构,并尝试加载内核调试器和符号。之后,它会空白屏幕并在屏幕底部打印一行等号,然后跳转到内核入口点。

可以通过重命名 OS2LDR.NTOS2LDR 来删除双启动菜单,这将使系统始终直接引导到 NT。

目录布局

与后来的版本不同,这些版本采用了 Windows 3.0 目录布局并进行了细微的调整,此版本使用的布局更类似于 Unix 或 OS/2,具有单独的二进制文件、库和数据文件夹。安装程序将内核复制到磁盘的根目录,并将操作系统的其余部分复制到 C:\NT 目录。引导加载程序是硬编码的,以在系统磁盘的根目录中查找内核,同样,内核假定系统安装在 NT 目录中。

  • C:\ —— 系统盘的根目录。包含引导加载程序和内核映像
    • C:\NT —— 配置文件、本地化数据、页面文件和自述文件
      • C:\NT\BIN —— 非 GUI 可执行文件
      • C:\NT\DRIVERS —— 内核驱动程序
      • C:\NT\DLL —— 库
      • C:\NT\MSTOOLS —— 开发工具包(如果已安装)
      • C:\NT\TMP —— 临时文件(在运行时创建)
      • C:\NT\WAV —— 系统声音
      • C:\NT\WINDOWS —— Windows GUI 可执行文件、配置和数据
        • C:\NT\WINDOWS\FONTS —— 字体
        • C:\NT\WINDOWS\SYSTEM —— 默认为空;存在可能是出于兼容性目的
        • C:\NT\WINDOWS\WINSPOOL —— 打印机配置和驱动程序
    • C:\REGISTRY —— 在运行时创建;截至目前,确切使用情况未知

可执行格式

此版本使用比 1991 年 10 月版本更早版本的可移植可执行文件格式,导致针对此版本的 Windows NT 构建的可执行文件完全无法在较新的操作系统版本上启动;这也导致 IDA Pro 等反汇编工具在没有自定义加载器的情况下无法反汇编文件,从而使分析变得更加困难。

子系统编号在早期版本和最终版本之间是不同的:

ID 子系统
0 未知
1 OS/2
2 Windows
3 未定义
4 本地
5 POSIX

Windows GUI 和控制台应用程序使用相同的子系统编号。两者之间的区别是在模块标志字段中进行的。

内核和驱动程序是纯 COFF 可执行文件,类似于 1991 年 10 月的版本。

配置

此时,注册表尚不存在。系统使用存储在 C:\NT 中的 NT.CFGNTUSER.CFGMSV1_0.CFG 配置文件以及存储在 C:\NT\WINDOWS 中的 WIN.INI 进行配置。首次启动时,还会在 C:\REGISTRY 中创建一个类似于注册表结构的目录树,但是,其中没有存储任何文件,因此其用途目前尚不清楚。这似乎可用于在设置域时存储与安全相关的数据。

静态链接

在此版本中,许多后来成为单个二进制文件的组件都静态链接到内核映像中。这包括 HAL、几个启动关键驱动程序,包括 ATA/IDE 硬盘驱动程序(ATDISK.SYS)和 FAT16 文件系统支持代码,以及仅支持实模式 DOS 应用程序的 NTVDM 的基本版本。

服务控制管理器静态链接到每个服务可执行文件,而不是像大多数以后的版本那样是一个独立的可执行文件。

内核

此版本缺少蓝屏死机KeBugCheckEx 在此版本中不存在,而 KeBugCheck 有一个简单的实现,此实现将字符串打印到附加的内核调试器,然后在无限循环中导致断点。如果没有连接调试器,这将被视为挂起,并且屏幕上不会显示任何内容来指示发生了任何事情。这可能只是调试版本的结果,而常规版本将具有错误检查的可见表示。

NtCurrentTeb 是此版本中的导出函数,而不是宏。

安全

README 中的说法意味着这是最早实现任何用户安全的版本之一,这从用户帐户系统的极其初级的性质中可以看出。虽然实现了特权和非特权用户,但它们只影响少数命令的使用,你只需选中复选框即可获得管理权限。README 还建议你以 SYSTEM 帐户登录 —— 此帐户没有密码。事实上,在内核中只有四个与安全相关的导出,而 NT 3.1 有 18 个。

用户帐户和组存储在 C:\NT\MSV1_0.CFG 中。那里预定义了一个“Admin(管理员)”帐户,并且以“Workstation Manager(工作站管理员)”(MSV1_0.DLL 中的硬编码)登录也可以。

子系统

会话管理器(Session Manager)命令行

唯一正常工作的子系统是 Windows 子系统 Win32Gui,它在 NT.CFG 中定义,并配置为在 NTUSER.CFG 中启动时启动。尽管 Win32Char 也被定义,但它可能只是具有独立 GUI 和控制台子系统的旧版本的遗留物,而截至此版本,它们已经合并为一个子系统。此版本还包括 OS/2 子系统(OS2SS.EXE),它似乎基于早期版本的 OS/2 2.0,但是,它不完整,并且尝试使用 OS2.EXE 启动器启动任何 OS/2 应用程序会破坏调试器,从而导致系统挂起。NT.CFG 还包括 POSIX 子系统的子系统条目,但不包括其可执行文件。

如果会话管理器(SMSS.EXE)无法自动加载任何子系统,它将下降到可通过调试器访问的基本命令行界面,该界面支持进程管理、调试用户模式 NT 进程、管理环境变量和探测系统参数。如果没有附加的调试器,这将显示为系统挂起,因为唯一显示的是一个空白的灰色屏幕,带有闪烁的文本模式光标和底部的一行等号字符。根据 NT 设计工作簿(NT Design Workbook),此命令行界面仅出现在调试版本上,而常规版本会因错误检查而崩溃。[4]

Windows 子系统

与更高版本相比,Windows 子系统的布局有所不同。值得注意的是,Windows API 的每个子集都是使用其自己的一对客户端和服务器 DLL 实现的:

  • 基本 API 的 BASE.DLLBASESRV.DLL(相当于 16 位 Windows 中的 KERNEL.EXE
  • 控制台 API 的 CONSOLE.DLLCONSRV.DLL(Win32 中新增)
  • 图形设备接口 API 的 GDI.DLLGDISRV.DLL
  • 用户 API 的 USER.DLLUSERSRV.DLL

32 位 Windows 库也尚未在其文件名中采用“32”后缀,以将它们与 16 位对应库区分开来。稍后,基本客户端和控制台客户端将合并 KERNEL32.DLL,而控制台、GDI和用户服务器将合并为单个 Windows 服务器 (WINSRV.DLL)。

启动时,CSRSS.EXE 会分析几个后来弃用的命令行参数(包括 Windows)的值,当设置为“打开”以外的值时,这些参数会跳过某些初始化过程,并且可能用于防止在双 GUI/控制台子系统设置中对 Windows API 进行双重初始化。SubSystemType 用于确定要向会话管理器注册的子系统类型,默认情况下设置为 Windows,尽管它也接受 PosixOs2Native 或用户指定的整数。这是原始设计的遗留物,CSRSS.EXE 旨在成为一个通用子系统服务器,它将采用其命令行上指定的个性。

此版本还包括第二组未使用的控制台客户端/服务器 DLL、CCONSRV.DLLCCONSOLE.DLL,它们可能是仅文本模式 Win32 子系统的剩余部分。文本模式控制台服务器似乎是从不同的源代码树目录构建的,包括控制台登录提示符和任务管理器,而客户端与其普通对应服务器完全相同,除了可执行标头中的时间戳,并且依赖于 CCONSRV.DLL 中不存在的功能,因此无法启动到文本模式 Win32 环境。控制台服务器还尝试在其初始化代码中启动本地安全机构子系统(LSASS.EXE),但失败,因为它是此版本中的 Win32 控制台应用程序,并且环境子系统在此启动时尚未完全初始化。正如 NT Design Workbook 所进一步建议的那样,LSASS.EXE 很可能曾经是旧版本中的本机应用程序。[5]

Bug

此版本一般不稳定,并且很容易挂在某些任务上。它可以像启动应用程序一样简单,按下键盘上的某些键,例如功能键,甚至让系统单独停留几秒钟。这些挂起的触发器可能因安装而异,至少其中一些可能与硬件相关。使用调试器会发现许多挂起都与 GDI 和 USER 问题有关。可能与此相关,字体在此版本中似乎被破坏,许多地方使用系统字体代替预期的 Helv(Microsoft Sans Serif)字体,例如“关于”对话框和文件管理器。

在此版本中,鼠标和键盘输入不可靠,有报告称串行鼠标无法与某些配置一起使用,并且键盘输入倾向于随机停止工作,直到重新启动。建议使用 PS/2 或总线鼠标以防止出现任何问题。此版本仅支持 PS/2 键盘扫描代码集 3,硬件(真实或模拟)也必须支持此代码集才能正常工作,否则按键无法正确映射,键盘输入因此变得不可预测。

其他小 bug 包括:

  • CD-ROM 驱动器不会出现在文件管理器中,但是,可以从命令提示符访问它们。
  • 目录可能会在文件管理器中错误地显示为空或不完整。可以通过更新其上次修改日期来强制显示缺失的条目。
  • 全选键盘快捷键(Ctrl+A)在记事本中不起作用。
  • 在记事本中创建新文件可能会导致垃圾被放置在新文本文件中。

文档

安装内容中包含一个 README.TXT 文档,其中包含安装说明、技术限制和有关新功能的文档等信息。

README 的内容:

Installation notes for ePDK (1.196)
-----------------------------------

This is an experimental build that can be used to see Windows NT as it
exists today. The system and development tools can be used to port your
existing Win 3.x applications to Win32. It is possible to edit, compile and
debug Win32 apps using self-hosted tools on Windows NT itself.

New Features Compared to Previous Builds
----------------------------------------

Security is enabled.  Logon as "SYSTEM", there is no password, for admin
level access to your computer.

Information for setting up NT as a workstation or server is discussed later
in this README file.

Program Manager is started and default groups are provided.

DOS and OS/2 dualboot installation support for NT

CTRL-ALT-DEL now supported (flushes disk cashes and notifies device
drivers before reboot).

Performance has improved especially when starting larger applications
such as the File Manager.

Wave form files are provided for systems equipped with a SoundBlaster
card.  Use the playsnd.exe applet to play wave forms on this
device.

Online help is provided for the command utilities such as xcopy,
attrib, mkdir, etc.  There is general help and help for specific
utilities

General Limitations
-------------------

The system is beta quality. NT employs disk caching which has been used
internally by the NT development group for many months.  However, since
this is a beta release, it is recommended that NT be installed on a test
machine (not a primary work machine).

The system only supports running Win32 apps (no DOS or Win 3.x apps). Later
releases will add DOS and Win 3.x support.  Additional limitations
listed below are temporary with full Windows NT being included in
subsequent releases.

There is not a final doc set available on all of the utilities, but sample
make files should be useful for getting started developing Win32 apps.

No support exists in the current system for floating point.  This support
will be added in the next several builds.

The debugger is NTSD and supports assembly and rudimentary C source code
debugging.

A separate debugging system is REQUIRED to communicate with the NT kernel
debugger to continue past exceptions, RIPs as well as to reboot the system.

Only the netbuei transport and the EtherLinkII network card is currently
supported.  The XNS support is present but has not been fully tested.

Unique Build Limitations
------------------------

Internal support for UB network controllers exists, but is not
being distributed until functionality is tested.

Logoff/Logon: Logging off and relogging on without rebooting is not
currently supported.  In the future, currently executing programs will
be automatically closed (with appropriate user input) when logoff
occurs.  Logging on with another account will provide user-specific
Program Manager groups, file permissions and other user-defined settings
(colors, network reconnections, etc.).

System Requirements
-------------------

NT does not currently support installation from floppy.  It is necessary
to pre-install MS-DOS (3.1 or later) or OS/2 1.21 or 1.3 before running
the NT setup program.

The boot partition (C:) must be FAT, but other partitions may be HPFS
and will be accessible from NT.

When installing on MS-DOS using SETUP.BAT, a DOS/NT dualboot system will be
created. Once installed, you will be prompted at boot time which system to
execute. The default time-out selects DOS.

When installing on OS/2 using SETUP.CMD, an OS2/NT dualboot system will be
created. Once installed, you will be prompted at boot time which system to
execute. The default time-out selects OS/2. This dualboot is not compatible
with the OS/2 1.21 dualboot implementation. Multiboot of OS/2, DOS and NT will
be supported later.

Do not run the setup procedures if you boot from a floppy. The setup procedures
(SETUP.BAT or SETUP.CMD) are run depending on the system booted (DOS or OS/2)
and always modify the boot info and loaders on C:, not the boot device.

Hardware Requirements
---------------------

Currently, Compaq hardware is primarily used to test NT.  Only Compaq
386 and 486 systems are supported.  386SX should work.	MCA (e.g. PS/2)
are not currently supported.  When MIPS systems become available, NT
versions for MIPS will be provided.  There is no support in the current
release for MIPS.

10M RAM minimum is needed to boot and run Win32 programs.  This will be
reduced to 6-8M RAM in later releases.

The NT system requries 12M for system files and 10M for a paging file.

If doing Win32 development, an additional 10M is needed for development
files.

Setting up Windows NT on a Network
----------------------------------

Windows NT's network support is currently limited to the Netbeui protocol
running over a 3Com EtherLink II card.	The following information is
temporary and will not apply in later Windows NT releases.

If your NT machine will not be on a network, log on using username SYSTEM
with no password.  You can make SYSTEM the default logon username by changing
the DefaultLogonUsername entry in the [Console] section of NTUSER.CFG.

For network use, you will need to edit the three configuration files in C:\NT
to specify your machine name, username, domain, and optionally a server to
confirm logons. Use your favorite editor's search and replace.

Edit C:\NT\MSV1_0.CFG to add your username to the local security system.
Replace MYUSERNAME with your username.

Edit C:\NT\NT.CFG to specify your domain name.	Replace MYDOMAIN with the
name of your domain.

Edit C:\NT\NTUSER.CFG to specify your machine name, your username, and your
optionally password server.  Replace each occurance of MYUSERNAME with your
username, and each occurance of MYMACHINENAME with the network name of your
machine.  If you want a network server to confirm the  username and password
at logon time, replace MYPASSWORDSERVER with the network name of the server
that will confirm logons.  Also uncomment the PasswordServer line near the
end of NTUSER.CFG.

Reboot your machine and logon with your network username and password.	You
should be able to connect to any network resource on servers running the
Netbeui protocol. NET USE and NET VIEW are both working.

Windows NT can run as a share-level server.  To enable the server, set up the
sharepoints in NTUSER.CFG.  The default NTUSER.CFG shares C:\PUBLIC as
PUBLIC.  To start the server, type NET START SERVER.  BEWARE:  There is
no security implemented for the server.  Every client has full access to each
share.

Currently you must be logged on as SYSTEM in order to change the system time
or run file system utilities FORMAT, CHKDSK, and RECOVER.
system utilities FORMAT, CHKDSK, and RECOVER.

图库

应用程序

系统应用程序

附件和游戏

SDK 工具和示例

媒介

  1. 已经确认可在 86Box 上使用大多数 VGA 兼容卡,及在 QEMU 上使用 -vga cirrus 选项。

引用资料

  1. G. Pascal Zachary. Show-stopper!:在 Microsoft 创建 Windows NT 和下一代的惊人竞赛
  2. https://www.betaarchive.com/forum/viewtopic.php?t=38906
  3. https://archive.org/details/windows-nt-3.1-pdk-1.196-sept.-1991
  4. NT OS/2 System Startup Design Note(NT OS/2 系统启动设计说明), p. 1(第 1 页)
  5. NT OS Base Product Content(NT OS 基本产品内容), p. 11(第 11 页)