Moving .VHD from Hyper-V to Virtual PC 2007 (HAL.DLL replace)

Why would anyone want to do this?   Am I crazy?   Probably, but that’s beside the point.  Hyper-V is amazing and super fast technology that I cannot get enough of.  I formatted my new laptop the day I bought it just so I could run Windows Server 2008 with Hyper-V and never looked back.

So why downgrade to Virtual PC 2007?

  • Backward compatibility for older VM hosts like Virtual PC 2007
  • Allows you to distribute easily for any user to boot
  • Wide compatibility with Windows XP, Vista, etc.
  • It’s just good manners to share in formats people can readily use

I won’t pretend I discovered this on my own and sources are cited at the footer.   My goal is to record the trick and share with others who may do similar VHD migration work.    There are two key changes to execute:  removing the Integration Services and replacing HAL.DLL

  1. Make a copy of the original VHD – Don’t you always?   Backups, backups, backups …
  2. Open Hyper-V MMC and Import the VHD
  3. Boot and install Integration Services
  4. … {enjoy using Hyper-V and adding cool new stuff over time} …
  5. Make a full VHD duplicate copy.   Maybe name it with a “CLEAN” suffix?
  6. Open Hyper-V MMC and Import the duplicate VHD
  7. Boot this and uninstall Integration Services from Add Remove Programs
  8. Shutdown the virtual guest
  9. You’ll need HAL.DLL from the original in #1 from before it went into Hyper-V mode.   This clean HAL.DLL is key to making the VHD boot into older systems like Virtual PC 2007.
  10. Use “VHDMOUNT.EXE /M {file name}” to mount the duplicate VHD file from #5
  11. Open Disk Management MMC and locate the new mounted drive letter
  12. Browse to C:WindowsSystem32HAL.DLL and rename to HAL.HPV.DLL
  13. Copy the clean HAL.DLL into C:WindowsSystem32
  14. Use “VHDMOUNT.EXE /U /C All”  to commit changes and save the VHD
  15. You’re ready to give this VHD file to anyone and they can easily boot it on 32-bit Windows XP with Virtual PC or whatever older VM host they like.

For completeness I must explain that when you first start up in Hyper-V the HAL.DLL layer is changed to give it that gorgeous direct hardware access that makes it run so incredibly fast.  But wait … my friends don’t have that … so it won’t boot on Virtual PC anymore.  Whoops!   That’s the whole challenge we’re trying to work around here.    What is VHDMOUNT.EXE you might ask?   A really cool utility that ships with Virtual Server 2005.    I personally don’t use Virtual Server 2005 directly (Hyper-V is faster) but keep it around anyway because of the helpful utilities that are part of the install folder.  Lastly,  I have included the Windows Server 2003 Enterprise Edition HAL.DLL file from two flavors:

Windows Server 2003 Enterprise Edition – Hyper-V flavor  (HAL.HPV.DLL)

Windows Server 2003 Enterprise Edition – Virtual PC flavor  (HAL.VPC.DLL)



Sources Cited:

CJG – Chris Givens – Migrating Hyper-V back to VPC! – Hal.dll

Return to Top ▲Return to Top ▲