Windows installations, unlike Linux, cannot easily be moved from one hardware to another. This is not just due to Microsoft's activation mechanism but the fact that the installed kernel and drivers depend on the actual hardware.
This article explains the common pitfalls and how to workaround these. We assume that either a physical Windows installation or a VMware image is the source of migration. It is also assumed that a suitable virtual disk image (either VDI or VMDK for VirtualBox >= 1.4) is already present.
The hardware dependent portion of the Windows kernel is dubbed Hardware Abstraction Layer (HAL). While hardware vendor specific HALs have become very rare, there are still a number of HALs shipped by Microsoft. Here are the most common HALs (for more information, refer to this article:
- Hal.dll (Standard PC)
- Halacpi.dll (ACPI HAL)
- Halaacpi.dll (ACPI HAL with IO APIC)
If you perform a Windows installation with default settings in VirtualBox, Halacpi.dll will be chosen as VirtualBox enables ACPI by default but disables the IO APIC by default. A standard installation on a modern physical PC or VMware will usually result in Halaacpi.dll being chosen as most systems nowadays have an IO APIC and VMware chose to virtualize it by default (VirtualBox disables the IO APIC because it is more expensive to virtualize than a standard PIC).
So as a first step, you either have to enable IO APIC support in VirtualBox or replace the HAL. Replacing the HAL can be done by booting the VM from the Windows CD and performing a repair installation.
Hard Disk Support
For reasons we don't understand, Windows memorizes which IDE/ATA controller it was installed on and fails to boot in case the controller changes. This is very annoying because you will run into this problem with basically all migrated images.
The solution here is to perform several modifications to the Windows registry. This can be done while the installation is still running on the original system because all it does is relax the IDE checks. Therefore the installation will continue to work on the original system after the modification. The easiest way is to use the excellent MergeIDE utility from the German c't computer magazine.
There is one Windows device driver that does not play nice on VirtualBox' hardware. Many physical PC systems (and VMware) have a AGP graphics bus which will cause agp440.sys to be installed. VirtualBox' virtual graphics card is on the PCI bus and the driver will cause a system crash.
The most correct approach is to boot the recovery console from the Windows installation CD and disable this service. However, it is also possible to just rename/delete agp440.sys in the C:\Windows\SYSTEM32\drivers directory. Here is a knowledge base article containing more information.
After the above steps, your Windows installation should work fine in VirtualBox.