Windows NT 3.51 on Hyper-V
I ran into a few issues with running this very old Operating System as a Virtual Machine on Hyper-V a few days ago. I needed to do this for a personal project that I am working on, one that I have been thinking about doing for a while now. Since I ran into a few issues with getting this to work correctly, I thought I should share my findings and write a quick guide on how to get Windows NT 3.51 Server and Windows NT 3.51 Workstation running on Hyper-V.
The issue that I kept encountering was the installer would constantly crash during installation because of a problem with the Network Adapter. I needed the ability to run Windows NT 3.51 Server as a Domain Controller instead of a standalone Server, so removing the Network Adapter at installation time was not an option for me.
Table Of Contents
For this guide I used the following software/environment:
- Windows 10 Pro - Version 1803 (OS Build 17134.320)
- Windows NT 3.51 Server - Build 1057 (RTM)
- Windows NT 3.51 Workstation - Build 1057 (RTM)
At the end of the installation I upgraded Windows NT 3.51 Server and Windows NT 3.51 Workstation to Service Pack 5. I also installed NewShell as an experiment just to see how it worked.
Windows NT 3.51
Before I started this project I realized that I have never actually used this Operating System, or have even seen it installed anywhere. My first Windows computer was running Windows 95, and I just never encountered Windows NT 3.51 (why would I, it was targeted towards businesses primarily). I used to run into Windows NT 4.0 all the time when I worked for an MSP a few years ago, but that was it. I think I only ever used Windows 3.1 once or twice and that was it, so I wasn’t even very familiar with the Program Manager/File Manager User Interface.
The history on the creation of Windows NT is definitely an interesting one and I recommend reading more about it if you get the chance. Operating System history and Retro Computing is an interest of mine, and with the availability of Virtualization it is very easy to try out these old Operating Systems without too much effort. The fact that I have to write a guide to get this particular Operating System up and running is a small annoyance, but it is possible.
I definitely had a lot of options for how I would undertake this project. I was certainly was not going to attempt using real hardware for it, so Virtualization was my only real option. I also did not have the option to use Azure or AWS (not because of the obvious lack of support for Windows NT 3.51), but because I will need to host multiple Virtual Machines later in the project and I simply did not want to pay for that. It doesn’t help that there a lot of options for Virtualization nowadays (QEMU, VirtualBox, VMware), but I settled on Hyper-V because it runs natively on my Surface Laptop without having to install anything extra and I wanted to see if it was possible to do his project with only using Microsoft products.
Virtual Machine Settings
There are a few specific settings that needs to be created in order for these Virtual Machines to work correctly. I won’t go into the specifics on how to create a Virtual Machine in Hyper-V, but here are the details on what the Virtual Machine settings need to be for both Windows NT 3.51 Server and Workstation:
- Generation: Generation 1
- Memory: 64MB (you can use more memory if you want, but remember that it is a 32-bit Operating System)
- Dynamic Memory Disabled
- Virtual Hard Disk: 1GB (you can create a bigger disk if you want, but you won’t need that much space)
Once the Virtual Machine has been created, go into the Virtual Machine settings and make the following changes:
- Processor: 1 Virtual Processor
- Processor Compatibility: Migrate to a physical computer with a different processor version
- Remove the SCSI Controller (not needed).
- Remove the Default Network Adapter (not compatible with Windows NT 3.51).
- Modify the BIOS settings by moving the Floppy Drive to top of list. The proper order should be Floppy, CD-ROM, IDE, Legacy Network Adapter.
For the Network Adapter you have two options depending on how you intend on using the Server after the installation is completed:
- If you are setting the Server up as a Domain Controller, add a Legacy Network Adapter and add it to the Virtual Network that you intend to use. There is a setting that you will need to change during installation to prevent it from crashing.
- If you are setting the Server up as a regular Server, do not add the Legacy Network Adapter. You will have to add the adapter after the installation is complete. If you are installing the Workstation this also applies.
An additional step that will help with the installation is to enable compatibility for older Operating Systems on the Virtual Machine. There is nowhere to set this in the Hyper-V Manager, it must be set with PowerShell:
Set-VMProcessor "Windows NT 3.51 Server" -CompatibilityForOlderOperatingSystemsEnabled $true
You can confirm that it has been setup correctly with this command:
C:\WINDOWS\system32> Get-VMProcessor "Windows NT 3.51 Server" | fl CompatibilityForOlderOperatingSystemsEnabled
The output should show that the compatibility is setup correctly for older Operating Systems:
C:\WINDOWS\system32> Get-VMProcessor "Windows NT 3.51 Server" | fl CompatibilityForOlderOperatingSystemsEnabled CompatibilityForOlderOperatingSystemsEnabled : True
I did try the installation with and without this setting and I can’ say for certain if it helps or not. I know that it is required for Windows NT 4.0 and Windows 2000.
Windows NT 3.51 does not boot from CD for the installation, and you will need three boot disks in order to install the Operating System. I won’t go into details on how to get these disks, but they are easy to find online (you can also create them by using a Windows 9x boot disk and the NT 3.51 CD). To convert them to work with Hyper-V, all you need to do is change the file extensions from img to vfd.
I won’t go into all of the steps on how to go through the MS-DOS and GUI installation of Windows NT 3.51, I am only going to focus on the Networking components.
If you setup the Virtual Machine without a Legacy Network Adapter, the installer will complain about the lack of a Network Adapter. You can ignore the warnings, just choose the following options to install Windows NT 3.51 without a Network and you will be able to continue the installation without the Network:
If you setup the Virtual Machine with a Legacy Network Adapter, there is a quick change that you need to make in order to allow the installation to complete successfully. For whatever reason the Windows NT 3.51 installer cannot automatically determine the speed of the network, which is set to AutoSense by default. If you change the speed to something else (10 Mbps for instance), the installer will not crash. If you leave it on AutoSense you will very likely run into this error that will crash the installer:
I am not entirely sure what is causing the error and given the age of the Operating System and the fact that it is being run in a Virtual Environment (which is was never designed to do) I don’t think I will ever know the true reason. I think it might have something to do with the installer thinking that the Network is up and running when it actually isn’t, and it can’t recover gracefully from the error. To prevent this, make the following changes to the DEC PCI Fast Ethernet DECchip 21140 adapter:
Once the Network settings have been configured you can continue setting up Windows NT 3.51.
If you installed Windows NT 3.51 without a Network Adapter, you can now safely add it to the Virtual Machine. You will need the installation CD in order to install the drivers and you will be able to configure the Network however you want. You can install it by going to the Control Panel and going to the Network settings.
If you installed Windows NT 3.5 with a Network Adapter you will be greeted with an error message the first time the system boots up:
To correct this issue all you need to do is go to the Control Panel, open the Network settings and set the Connection Type of the Network Adapter to AutoSense. Once the Virtual Machine restarts, the error message will be gone and the Network will be available.
Once the Network settings have been configured, you should fix the Screen Resolution by changing it from 640x480 to 800x600. You will need to restart the Virtual Machine to apply the settings.
Windows NT 3.51 Service Pack 5
It is fairly straight-forward to install Service Pack 5 on Windows NT 3.51 Server and Workstation. I added the file to an ISO image and mounted it on both Virtual Machines and copied it to the C drive in it’s own directory. There are only two commands that you need to run in order to install the Service Pack:
SP5_351I.EXE -d UPDATE.EXE
The installation only takes a minute and you will need to reboot the Virtual Machine at the end of the installation.
The installation of NewShell is entirely optional. I put the files onto an ISO image to move the files over to both Virtual Machines just like the Service Pack files. It only requires one command to install the update:
Reboot the Virtual Machine to apply the update. Once the system restarts you will immediately notice the change:
If you want to go back to the old Program Manager/File Manager user interface, you can uninstall NewShell by going into the installation directory and running this command:
Hyper-V Limitations with Windows NT 3.51
There are a few limitations to running Windows NT 3.51 on Hyper-V, all of which will never be resolved. Hyper-V Guest Additions do not work and will never work. The drivers for the video adapter can only work at 16 colours and maxes out at 800x600 for the resolution. I looked around for third-party drivers but I was not able to find any.
An annoying issue that I ran into with Hyper-V was that when you are accessing the host system over Remote Desktop, you cannot use Remote Capture on the Virtual Machine.