Loading NT 4.0 & Windows 2000 on Hyper-V

In this attempt to get NT 4.0 running on my machine, here is what I did. This holds true for 2008r2, and 2012 along with the Windows 10 preview.

old versions of Windows are not supported, but with a little bit of fun from PowerShell you can get them to work.

First make sure you run PowerShell as Administrator!

PS C:\WINDOWS\system32> get-vm

Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
—- —– ———– —————– —— ——
NT40 Off 0 0 00:00:00 Operating normally
Windows 2000(wks) Off 0 0 00:00:00 Operating normally

As you can see here I have two virtual machines.  Both of them are ‘off’ since there is no memory assigned, nor is there any uptime.  It’s weird to me how they are “Operating normally’ since they aren’t running but I guess that’s a feature.  Make sure the VMs are powered off before trying to do this.

Restricting the CPU capabilities was the checkbox to enable in the first version of Hyper-V.  Now it’s hidden from the user, so you need to enable this in Power Shell.

First let’s check a VM:

PS C:\WINDOWS\system32> Get-VMProcessor NT40 | fl CompatibilityForOlderOperatingSystemsEnabled

CompatibilityForOlderOperatingSystemsEnabled : False

As you can see it’s disabled.  Now to enable it with:

PS C:\WINDOWS\system32> Set-VMProcessor NT40 -CompatibilityForOlderOperatingSystemsEnabled $true

Now we can verify it’s turned on:

PS C:\WINDOWS\system32> Get-VMProcessor NT40 | fl CompatibilityForOlderOperatingSystemsEnabled

CompatibilityForOlderOperatingSystemsEnabled : True

And we are good to go.

NT 4.0 Service Pack 6 on Hyper-V / Windows 10 Technical Preview 9879

NT 4.0 Service Pack 6 on Hyper-V / Windows 10 Technical Preview 9879

Now for the networking part, remember to remove the existing network adapter, and add the ‘legacy’ network adapter.  On my PC there was an additional snag, which is that every time a VM reboots, or is powered on the legacy adapter will receive NO packets.  Go into the Hyper-V console, and disconnect the legacy adapter, and reconnect it, and network traffic will flow.

And additional note on installing Windows 2000.  You *MUST* change the HAL uppon instalation.  By default it’ll detect an ACPI system, but the driver ACPI.SYS will bluescreen the VM.  Hit F5 when it prompts about storage adapters, and select the ‘STANDARD PC’ HAL from the list.

Just to make the flags more clear

21 thoughts on “Loading NT 4.0 & Windows 2000 on Hyper-V

    • None at all. Instead you’ll need an OS that can drive a virtual sound card, along with a client to present it.. Such a shame, but Hyper-V is a server product (for things that don’t involve audio, what do those folks do?), and I’m sure some fancy pants version of Terminal Server does sound. MS-DOS and friends are as always left out.

  1. …and so are Windows 9x/ME and presumably some more exotic operating systems as well, as “official” support is only given for recent NT-based versions of Windows and a handful of Linux distros. It would be interesting to compile a “What works in Hyper-V” list at some point, similar to the one that was done for VPC.

    • I’d imagine they should work, although the problem with doing OS lists is that for some reason everyone wants to throw 1000000’s of linux distros on them making the list moot.

      Legacy support is not Microsoft’s direction, the Systems Journal people are running the show. I’m just hoping with all this .net buzz that the Languages people can break free of the OS/Office stuff as it’ll eventually slide into a past memory.

      If this $99 Windows tablet thing doesn’t work the future of Windows is pretty much screwed.

      • I think the $99 tablets will fail – there is no compelling use case, and you can’t use Windows on a tablet without using the desktop at some point (even if its MS Office). I can’t imagine using the Windows desktop on a 7″ screen with my finger! Its barely usable on my 11″ tablet.

        Chromebooks are potentially larger threat. I work in education, and we have a huge deployment of Chromebooks. The reason for it really is price, and ease of deployment. Windows just isn’t something you can easily deploy in a school; you need Active Directory, a way of imaging the machines (these days its SCCM), a way of deploying software and updates to it (again SCCM or WSUS), etc. Its a lot of infrastructure, and then you need someone to set it all up and maintain it.

        Here in Australia, Woolworths has recently made a big deal about dumping Windows for the Chromebook too – so I don’t think it’s reasonable for people to assume that this situation will be confined to EDU.

        Microsoft is also taking a bit of a gamble with the Windows for Bing licenses. The Windows machines are now coming down to Chromebook pricing (ie the HP Stream 11).

        So great I thought, we could run them like Chromebooks – provision a bunch of Office 365 accounts and they can just sign in to Windows with them – ie, no infrastructure required in the school. No such luck. It turns out Microsoft accounts and Office 365 are accounts are completely different things – ie the Windows team didn’t bother talking to the cloud services team. So the machines have to be joined to a domain (requiring a license upgrade worth half the machines buy price), then to use 365 with our own password policy we’d need to deploy ADFS and do SSO with it, etc. So we now need even more infrastructure and services required on-site in order to deploy a cloud-based solution!

        In short, MS is winging about Chromebooks eating their sales (see the Scroogled campaign), but completely fail to understand the reasons why their education customers are moving en-masse to the devices.

        • I think they are the ultimate media watching device. No need to wait for something like someone porting VLC to RT, it runs real windows so VLC works out of the box.

          I’m sure I’m a fringe kind of person, but I like the idea of real disposable general purpose computing. Since it’s windows I can not only put anything on there I want, but I can even install compilers or whatever.

          But there is no mistake this is a response to chrome/android and friends. The real winner here is Intel as their low power quad core SoC makes all of this possible.

          But from an organization POV, I can understand the desire for something like a chrome book, sometimes you don’t want that open ecosystem wandering the halls. But remembering back to when I was a kid, the idea of getting your own computer for $99 would be too good to be true.

  2. “And additional note on installing Windows 2000. You *MUST* change the HAL uppon instalation. By default it’ll detect an ACPI system, but the driver ACPI.SYS will bluescreen the VM. Hit F5 when it prompts about storage adapters, and select the ‘STANDARD PC’ HAL from the list.”
    Or use an older version of Hyper-V, like the Server 2008 R2 one, that did have official support.

  3. get-vmprocessor vmnt401 |fl Compatibilityforolderoperatingsystemsenabled

    CompatibilityForOlderOperatingSystemsEnabled : False

    PS C:\WINDOWS\system32> set vmprocessor VMNT401 compatibilityforolderoperatingsystemsenabled $true
    Set-Variable : A positional parameter cannot be found that accepts argument
    At line:1 char:1
    + set vmprocessor VMNT401 compatibilityforolderoperatingsystemsenabled …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Set-Variable], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetVariableCom

  4. Is there any way to get resolution higher than 800×600 within Hyper-V? I have a couple old NT4 boxes running a specific legacy application that requires 1024×768 resolution. I’d like to virtualize these on modern hardware, and I have everything in place at this point except for a graphics driver that works to enable 1024×768 resolution.

  5. Thanks a lot for this, just a small comment, i tried this on a Hyper-V Core Server 2016 and the needed command only worked with this syntax “Set-VMProcessor NT40 -CompatibilityForOlderOperatingSystemsEnabled $true”

  6. Thank you for posting this! I am certified on 2000 Advanced Server and just wanted to revisit the OS in HyperV, and was getting the blue screen on acpi.sys – had forgotten about the HAL and Standard PC (F5). Now all is working! Thank you for the great post!

  7. Thank you for this excellent write-up! Just wanted to point out a small typo in one of the commands that tripped me up for a sec:

    PS C:\WINDOWS\system32> Set-VMProcessor NT40 CompatibilityForOlderOperatingSystemsEnabled $true

    There must be a dash (“-“) before the “CompatibilityForOlderOperatingSystemsEnabled” switch or it will not work. So it should be: -CompatibilityForOlderOperatingSystemsEnabled

    • Thanks! WordPress does its best to make things look ‘nice’ which will strip characters, and even modify stuff like quotes, underscores.. it really is annoying.

      I’ll try to update it again, but I thanks again for the correction.

Leave a Reply