I was trying out Parallels Desktop 18’s new feature that allows it to automatically download Windows 11 for ARM64 to install a new VM, and wondered how exactly that worked. Fortunately, it doesn’t take much effort to figure that out (with Fiddler to help). The basic flow is like this:
- Download the file https://download.microsoft.com/download/1/b/4/1b4e06e2-767a-4c9a-9899-230fe94ba530/products_Win11_20211115.cab and extract the XML file from within it. That XML file contains a list of all the Windows 11 21H2 ESD files (client/retail and business/VL) in all languages.
- Pick the ESD file that you want and download it. For example, these are the en-us images of interest:
- Client/consumer: http://dl.delivery.mp.microsoft.com/filestreamingservice/files/78630d4b-9cdc-44ee-9c4a-fd14e8d72936/22000.318.211104-1236.co_release_svc_refresh_CLIENTCONSUMER_RET_A64FRE_en-us.esd
- Business/volume: http://dl.delivery.mp.microsoft.com/filestreamingservice/files/2d2010fa-3b12-4b28-be22-ec055586f61e/22000.318.211104-1236.co_release_svc_refresh_CLIENTBUSINESS_VOL_A64FRE_en-us.esd
- Convert that ESD file to an ISO file.
The only trick is that last step: What utility can you use to do that conversion? Parallels is using an “esd2iso” command line utility, and the UUPDump site uses one of the nastiest batch files I’ve seen in a long time. (Seriously, who writes batch files like this any more?)
But studying what that batch file does, I think it can be converted to PowerShell fairly easily, at least as long as you have the ADK installed to provide the tools you need (and run this on Windows, of course). Here’s my quick-and-dirty take on it (see the attached zip file below for the source):
So much simpler than that batch file (but it is doing quite a bit less, so I will cut it a little slack — the batch file also does all sorts of things to merge ESD files, remove apps, apply updates, etc., none of which I really need for this). So what does this do? It extracts the first image index from the downloaded ESD file into a temporary folder. This image contains the files needed for boot media:
Next, it exports the third image from the same ESD file into \Sources\boot.wim in that same temporary folder. This image contains Windows PE and the setup files for doing the Windows 11 install:
Now we need to export the OS image itself. Since this particular ESD file contains three separate OSes, we need to pick the one we want. In this case, since I wanted Windows 11 Pro, I chose index 6:
If you want a different image, change the $osImage and $osImageName variables at the top of the script.
With everything exported into the right place (the temporary folder), now we just need to bundle it up into a bootable ISO. The whole process is pretty quick (faster than downloading the ESD file). Once it’s done, you’ll end up with an ISO file that you can use with VMware Fusion:
Make sure you press a key to boot (or change the “efisys.bin” to “efisys_noprompt.bin” in the script so it doesn’t prompt, but then you better have the boot order right to prevent a boot loop, or eject the ISO at the right time). Once you do that, you should see Windows 11 setup start:
In this case, I pressed Shift-F10 to open a command prompt, then ran “winver” so that I could confirm that it did install Windows 11 Pro, which is what I intended.
Oddly enough, this same ISO doesn’t work with Parallels:
That “Select Windows edition” drop-down list is empty, so it won’t let me proceed. So there’s something that Parallels is doing to enumerate the list of images available in the ISO that my script didn’t deal with. VMware Fusion doesn’t care, it just takes the ISO and tries to boot it, so it works fine. Since Parallels can do the equivalent work behind the scenes, this isn’t the end of the world.
Now if Microsoft would just provide a more obvious way to get ISOs for Windows 11 ARM64 VMs, we wouldn’t have to go through such hack-ish processes. But until then, have fun…
A note to add: It occurred to me that Parallels likely either reverse-engineered the Media Creation Tool, or were given information by Microsoft on how it works behind the scenes. To test that theory, I downloaded and ran the Media Creation Tool with Fiddler running. And sure enough, it does pretty much the same thing (although it does use a FWLink, https://go.microsoft.com/fwlink/?LinkId=2156292, which gets redirected to the same CAB file URL mentioned above), download a CAB file containing an XML file with details on all the “self-contained” ESD files available to the Media Creation Tool. Based on which you choose, it will download that to USB or an ISO.
So, no particular magic here, just exposing the ARM64 images that you can’t otherwise get at. But that made me wonder: Why can’t you just use the Media Creation Tool on an ARM64 install (which has a bit of a chicken-and-egg issue, but since I already had a Windows 11 ARM64 VM created from the Insider VHDX file, I already had the “chicken”)? I tried it, and the answer is somewhat simple: You can’t actually download an ARM64 version of the Media Creation Tool. You end up downloading an AMD64 version, so it downloads an AMD64 ESD file. (So all Microsoft would need to do to fix this is to make available an ARM64 version of MCT, which I’m sure they have somewhere already. Sigh.)
convert-UUP.cmd is for converting (assembling) UUP files
the one for converting full ESD files is esd-decrypter, because they were encrypted before Win10 v1709 😉
Fortunately, once people can decrypt the encrypted files they decided it was pointless to encrypt them any more.