Windows 11 and Proxmox

Written by

in

It’s been a long time since I had to build a custom ISO for Windows, but Windows 11 has been annoying me enough that I finally had enough and decided to pull my finger out and do it.

Additionally, because I have the memory of a sieve, I thought I better write it down so I can look it up later. You’ll be amazed how many things I google to discover that I had already done that thing, and the first result is my ‘this is how to do it’ documentation.

This is how to create a Win11 ISO for Proxmox, and how to use it. You can also (if you’re lucky) use your already existing Windows product key baked into the firmware of your machine to automatically activate it.

Before you start, you need to be doing this on a Windows 11 machine. The exercise of getting, or creating one, is left up to the reader.

Requirements

1 – Windows 11 itself.
You need the contents of an extracted ISO, on your local machine. A very simple way to do that, that also helps you out with autoconfig and things like that, is to use Rufus to generate a bootable USB (making sure all the anti-user stuff is disabled) and then copy the contents of that USB to somewhere on your PC. In this example I’m going to be using c:\win11build but you can use whatever you want. Copy the contents of the USB to c:\win11build and it should look something like this:

If you used Rufus to extract and customise the image, in the sources directory there will be $OEM$/$$/Panther/unattend.xml which is where Rufus does its magic.

2 – Oscdimg (which is part of the Windows ADK)
You can get the ADK from Microsoft . Download and install it. This is the tool that creates a valid ISO from our c:\win11build directory

3 – Redhat’s VirtIO Drivers. The public archive is here, but it always is very slow to download from. Because I’m impatient, I’ve created a local copy of virtio-win-0.1.302.iso here (which is the latest version as of August 2026) so it’s nice and fast, but that’s only for my convenience. You should probably download it from the source.

Preparation

To make it simpler for oscdimg to create a dual-mode (both UEFI and BIOS) ISO, you need to copy a few files into the c:\win11build directory.

Copy the two files c:\win11build\efi\microsoft\boot\efisys.bin and c:\win11build\boot\etfsboot.com into c:\win11build. You will see these in my example screenshot above.

At this point you should test that you actually can build an ISO by opening up a Terminal window as admin (right click on the start button and pick ‘Terminal (Admin)’) and running the following command:

Oscdimg -bootdata:2#p0,e,bEtfsboot.com#pEF,e,bEfisys.bin -u1 -udfver102 C:\win11build\ c:\windows.iso

The last parameter is where the ISO should be created. It will look something like this.

If it errors, you need to solve that problem first. If it complains about Etfsboot or Efisys.bin missing, you didn’t copy them into c:\win11build in the previous step.

Install VirtIO drivers

There are quite a few ways to slipstream drivers into a Windows ISO, but after messing around with all of them, it turns out the easiest way is the best!

Create a folder called ‘$WinPeDriver$’ in c:\win11build and copy all the drivers you want from your virtio ISO into it. You want at least NetKVM, and the VirtIO storage drivers from amd64/w11/viostor* and vioscsi.*

If you’re as lazy as me, you’ll be happy to know I’ve done the work for you already. Simply extract WinPeDriver.7z into c:\win11build and it’ll put it all there for you.

VirtIO Guest Tools

I also suggest copying virtio-win-guest-tools.exe from the virtio ISO into c:\win11build because it’s something you’re always going to want to install.

Build your ISO and test it

Hopefully you still have that Terminal window open, because now you can just push uparrow and enter to rebuild the ISO. This time it will have all the drivers pre-installed and ready to go!

Create a new VM, set everything to be virtio and try booting it from the ISO. If you used Rufus to remove all the annoyances, it will boot in both UEFI and BIOS mode. Otherwise it’ll only work in UEFI with a virtual TPM module. You can extract my OEM.7z into c:\win11build\sources which will create the $OEM$ directory and its contents. But you should probably create you own. There’s plenty of options.

Activation

If your proxmox host has a valid Windows licence baked into its firmware, you should now extract it so you can use it with your new shiny VM, which ended up being big enough for its own article.