UPDATE: Fedora now provide signed drivers here: http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/ (windows doesn’t like using unsigned drivers that are critical to the boot process, like disk controllers)
I used this method in addition to the one in http://dice.neko-san.net/2011/02/automated-windows-server-2008r2-installation-from-a-linux-server-without-machine-imaging/ to use virtio (viostor+netkvm) using PXE installation, and then to have the drivers (including balloon) inserted into the installation itself.
You’ll need the Red Hat (RHEV) ISO that contains the drivers (in cat/inf/sys format, not the msi format) since they need to be signed to be used properly. I mounted this ISO on G:
Start the Deployment Tools Command Prompt and mount the PXE WIM:
C:\data\winpe_amd64>dism /mount-wim /wimfile:winpe.wim /mountdir:mount /index:1
Insert the viostor and netkvm drivers:
C:\data\winpe_amd64>dism /image:mount /add-driver /driver:g:\netkvm\2k8\amd64\netkvm.inf C:\data\winpe_amd64>dism /image:mount /add-driver /driver:g:\viostor\2k8\amd64\viostor.inf
Unmount the WIM:
C:\data\winpe_amd64>dism /unmount-wim /mountdir:mount /commit
Copy the netkvm driver files (netkvm.cat netkvm.inf netkvm.sys) and all the balloon files to \\bootsrv.example.com\data\windows\drivers
There appears to be a problem when the kernel tries to load viostor twice. Possibly the driver is supposed to prevent that action itself, but it doesn’t. In any case the installation crashes out at the point it imports viostor.inf from the 3rd party driver location. The viostor driver is automatically copied from the PXE image, so it’s not required in the 3rd party location.
C:\data\winpe_amd64>mkdir \\bootsrv.example.com\data\windows\drivers C:\data\winpe_amd64>copy g:\balloon\2k8\amd64\*.* \\bootsrv.example.com\data\windows\drivers\ C:\data\winpe_amd64>copy g:\netkvm\2k8\amd64\*.* \\bootsrv.example.com\data\windows\drivers\
Append this to the end of the autounattend.xml file to include the 3rd party driver location: (without this step, the installation will copy the disk driver but not the network driver)
<settings pass="offlineServicing">
<component name="Microsoft-Windows-PnpCustomizationsNonWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="NonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DriverPaths>
<PathAndCredentials wcm:action="add" wcm:keyValue="1">
<Path>\\bootsrv.example.com\data\windows\drivers</Path>
</PathAndCredentials>
</DriverPaths>
</component>
</settings>
The PXE image will now be able to use the virtio network and disk devices, and the machine should boot up after install.