As I’m sure most people have experienced, there is always that one piece of software that cannot function on anything other than ancient hardware or an unsupported OS. In my example today, I am dealing with an ancient piece of physical hardware, sitting under someone’s desk, running Windows XP Pro. Before the spinning rust blew itself up, we got our hands on it to P2V the machine.
Thankfully (maybe? kinda?), the OS was installed on a SATA drive, so grabbing an image with a SATA-to-USB converter was dead easy. However, the actual process to get this pile of hot garbage running on a Generation 1 Hyper-V VM is an entirely different story. To save you time (and to allow the Google crawlers to find this article on important words), all you need to know is that Generation 1 VMs boot from IDE drives – there is no support for SCSI or SATA. That means when your new VM attempts to turn on, it will Bug Check with a 0x0000007B error. Why? Because your OS still thinks it needs to load SATA drivers at boot. Derp – no boot drive found.
This is one of those times where I wish I could have just said “install it on a new machine from scratch”, but we aren’t that lucky. So here’s how to fix your problem:
- Get a VHDX of your machine. I suggest disk2vhd and I suggest doing it offline (SATA-to-USB). Don’t bother with doing it live with VSS – that’s a nightmare on XP
- Copy your VHDX over to a Hyper-V server. This can be the final location or your local desktop. Create a new VM and mount that VHDX
- Copy and mount a WinPE ISO to this VM and configure your VM to boot into that first
- If you don’t have a favorite WinPE flavor, I suggest AOMEI PE Builder
- Run regedit – you’re going to be editing the VHDX’s registry!
- Highlight the HKEY_LOCAL_MACHINE key and in the menu select Registry -> Load Hive
- Browse the VHDX (probably C: drive) and select C:\Windows\system32\config\system – call it TEMP
- Under your TEMP key, browse to CurrentControlSet001\Services and update the following keys to the specified values (we are changing what drivers are loaded at startup here, specifically disabling AHCI/SATA and enabling IDE):
- amdide: Start = 3
- atapi: Start = 0
- cmdide: Start = 3
- iaStorV: Start = 3
- intelide: Start = 0
- msahci: Start = 3
- pciide: Start = 3
- viaide: Start = 3
- Still under your TEMP key, browse to CurrentControlSet001\
- Cross-reference the following keys and their values
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7111]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7110&cc_0601]
"ClassGUID"="{4D36E97D-E325-11CE-BFC1-08002BE10318}"
"Service"="isapnp"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\primary_ide_channel]
"Service"="atapi"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\secondary_ide_channel]
"Service"="atapi"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IntelIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000004
"Type"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\PCIIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000003
"Type"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,70,00,63,00,69,00,69,00,64,00,65,\
00,2e,00,73,00,79,00,73,00,00,00
"DisplayName"="Standard IDE/ESDI Hard Disk Controller"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\atapi]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000000
"Tag"=dword:00000019
"Type"=dword:00000001
"DisplayName"="Standard IDE/ESDI Hard Disk Controller"
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,61,00,74,00,61,00,70,00,69,00,2e,\
00,73,00,79,00,73,00,00,00