How to perform a clean Windows 11 install on Surface Pro X (Windows on ARM)
Sep 11, 2024

When installing Windows from an ISO on a typical Intel-based PC, the process is usually straightforward—create a bootable USB drive, install the OS, and you're good to go. However, installing Windows on an ARM-based device like the Surface Pro X is a whole different story. This is because the standard ISO files don't include the necessary drivers for ARM-based devices. Therefore, you need to manually inject drivers and take additional steps to ensure everything works smoothly. In this guide, I will walk you through the detailed steps I used to successfully install a clean version of Windows 11 on my Surface Pro X.

Step 1: Download Windows 11 from UUPDump

Head over to UUPDump to find the specific version of Windows 11 you want to install. Select the language and the edition (Windows Home, Pro, Education, Enterprise, etc.), then click Create download package.

Step 2: Build the ISO

Once you've downloaded the ZIP file from UUPDump, extract it to a folder. Open Command Prompt as Administrator, navigate to the extracted directory, and run the script uup_download_windows.cmd to start downloading the necessary files and creating the ISO. Depending on your internet speed and system performance, this process can take anywhere from 30 minutes to a couple of hours.

Step 3: Download the Surface recovery image

While waiting for the ISO to be created, go to the Microsoft Surface recovery image website and download the recovery image specific to your Surface model.

Step 4: Download latest Surface drivers

Next, head over to the Surface Qualcomm Drivers GitHub page and download the latest ARM drivers for your specific Surface model. For example, at the time of writing, the latest drivers for my Surface Pro X with SQ2 processor are in this folder: Surface/8180_CAR/200.0.38.0. You can use the GitHub directory downloader to download just that specific folder.

Step 5: Extract the CAB drivers

Once you've downloaded the ZIP file containing over 100 .cab driver files, extract the ZIP to a folder, say C:\temp\arm-drivers. Next, you need to extract each CAB file to C:\temp\extracted-drivers. You can do this easily with the following batch script. Save the script as extract.bat and run it. Make sure to update the paths if your directories differ.

@echo off
set source_dir=C:\temp\arm-drivers
set dest_dir=c:\temp\extracted-drivers

if not exist "%dest_dir%" (
    mkdir "%dest_dir%"
)

for %%f in ("%source_dir%\*.cab") do (
    echo Extracting %%f to %dest_dir%
    expand "%%f" -F:* "%dest_dir%"
)

echo All done
pause

Step 6: Create the bootable USB

Once the ISO is ready, insert your USB drive and use Rufus to burn the ISO to the USB stick.

Step 7: Replace boot.wim with Recovery Image's boot.wim

Extract the Surface Recovery Image ZIP file you downloaded earlier and replace the boot.wim file from sources\boot.wim in the recovery image with the boot.wim on your USB drive (D:\sources\boot.wim if your USB drive maps to D drive).

Step 8: Download and copy required scripts

Download the necessary deployment scripts from https://go.microsoft.com/fwlink/?linkid=872894. I have also backed it up here in case the link goes down. Extract the ZIP and copy ApplyImage.bat and CreatePartitions-UEFI.txt from Deployment folder (or all scripts for broader support) to the root directory of your USB drive.

Step 9: Copy extracted drivers to the USB Drive

Copy the extracted driver folder: C:\temp\extracted-drivers to your USB drive.

Step 10: Boot into Surface UEFI and disable Secure Boot

Power off your Surface Pro X. Hold the Volume Up button and press the Power button to start your device and it will enter the UEFI settings. Disable Secure Boot and set USB boot to the highest priority.

Step 11: Boot from USB and enter Command Prompt

Insert the USB drive and boot from it. Choose your language, select Troubleshoot, and then select Command Prompt.

Step 12: Identify the USB drive

In Command Prompt, type: diskpart to enter DiskPart and type list volume to list volumes.

X:\Windows\System32>diskpart

Microsoft DiskPart version 10.0.22621.1

Copyright (C) Microsoft Corporation.
On computer: MININT-5VEB9S9

DISKPART> list volume

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C   Windows      NTFS   Partition    476 GB  Healthy
  Volume 1         SYSTEM       FAT32  Partition    100 MB  Healthy    Hidden
  Volume 2         Recovery     NTFS   Partition    500 MB  Healthy    Hidden
  Volume 3     D   Win11-24H2-  NTFS   Removable     28 GB  Healthy
  Volume 4     E   UEFI_NTFS    FAT    Removable   1039 KB  Healthy

DISKPART> exit

Leaving DiskPart...

Note the drive letter assigned to your USB drive (e.g., D:), then type: exit to leave DiskPart.

Navigate to the USB drive by typing D: and confirm you can see the files by running dir. You should see ApplyImage.bat listed.

D:\>dir
 Volume in drive D is Win11-24H2-ARM64-USB-Installer
 Volume Serial Number is 109F-D2C7

 Directory of D:\

11/28/2017  10:04 AM             6,044 ApplyImage.bat
11/28/2017  10:35 AM             6,985 ApplyRecovery.bat
09/10/2024  10:00 PM            34,494 autorun.ico
09/10/2024  10:00 PM               246 autorun.inf
09/10/2024  10:07 PM    <DIR>          boot
09/10/2024  09:51 PM         2,611,016 bootmgr.efi
11/02/2017  10:08 AM               667 CreatePartitions-BIOS-FFU.txt
07/13/2016  02:27 PM             1,036 CreatePartitions-BIOS.txt
11/02/2017  10:08 AM               863 CreatePartitions-UEFI-FFU.txt
07/13/2016  02:27 PM             1,305 CreatePartitions-UEFI.txt
11/28/2017  09:06 AM               576 CreateRecoveryPartitions-BIOS.txt
11/22/2017  02:27 PM               631 CreateRecoveryPartitions-UEFI.txt
09/10/2024  09:51 PM    <DIR>          efi
09/10/2024  10:02 PM    <DIR>          extracted-drivers
07/13/2016  02:27 PM               118 HideRecoveryPartitions-BIOS.txt
07/13/2016  02:27 PM               187 HideRecoveryPartitions-UEFI.txt
09/10/2024  09:51 PM            80,312 setup.exe
09/10/2024  10:00 PM    <DIR>          sources
09/10/2024  10:00 PM    <DIR>          support
              14 File(s)      2,744,480 bytes
               5 Dir(s)  23,145,111,552 bytes free

Step 13: Determine the Correct Edition Index

The ApplyImage.bat script, by default, installs the edition with Index 1 from the provided WIM file. If your ISO contains multiple editions (e.g., Windows 11 Pro, Windows 11 Enterprise), and you want to install a different edition, you’ll need to modify the script to specify the correct index.

To find the index number for the edition you want to install, run the following command in the Command Prompt:

dism /get-wiminfo /wimfile:D:\sources\install.wim

This will display a list of the available editions along with their corresponding index numbers. For example, if you see something like:

Deployment Image Servicing and Management tool
Version: 10.0.22621.1

Details for image : D:\sources\install.wim

Index : 1
Name : Windows 11 Pro
Description : Windows 11 Pro
Size : 25,809,399,717 bytes

Index : 2
Name : Windows 11 Enterprise
Description : Windows 11 Enterprise
Size : 25,811,284,070 bytes

The operation completed successfully.

If you want to install Windows 11 Enterprise, which is Index:2, you will need to edit the ApplyImage.bat script.

To do this, open the script in Notepad by running:

notepad ApplyImage.bat

Then, find lines 82 to 85 in the script where it references /Index:1, and change 1 to 2 (or the index number of the edition you want to install). This ensures that the correct edition is installed. If you're installing the edition at Index:1, you can skip this step.

Once edited, save the file and continue to the next step.

Step 14: Start Windows installation

To begin the installation of Windows, run the following command:

D:\ApplyImage.bat D:\sources\install.wim

This script will automatically handle the disk partitioning process using the diskpart command. It will create and assign the necessary partitions as follows:

  • W: for the Windows system partition
  • S: for the System (boot) partition
  • R: for the Recovery partition
DiskPart successfully assigned the attributes to the selected GPT partition.

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     W   Windows      NTFS   Partition    476 GB  Healthy
  Volume 1     S   SYSTEM       FAT32  Partition    100 MB  Healthy    Hidden
* Volume 2     R   Recovery     NTFS   Partition    500 MB  Healthy    Hidden
  Volume 3     D   Win11-24H2-  NTFS   Removable     28 GB  Healthy
  Volume 4     E   UEFI_NTFS    FAT    Removable   1039 KB  Healthy

Leaving DiskPart...

As the script runs, it will prompt you with a few questions:

  1. Do you want to create a Recovery partition? — Select Y to create the recovery partition.
  2. Erase all data and continue? — Select Y to erase the existing data and proceed with the installation.
  3. Deploy as Compact OS? — Select N unless you specifically want a compact OS installation.
  4. Does this image include Extended Attributes? — Select N for this as well.

The script will take care of applying the Windows image to the W partition, and reconfiguring the disk partitions for optimal setup on your Surface device.

Step 15: Install Surface drivers

After the installation completes, add the Surface drivers by running dism /image:W: /add-driver /driver:D:\extracted-drivers /recurse.

D:\>dism /image:W: /add-driver /driver:D:\extracted-drivers /recurse

Deployment Image Servicing and Management tool
Version: 10.0.22621.1

Image Version: 10.0.26100.1742

Searching for driver packages to install...
Found 133 driver package(s) to install.
Installing 1 of 133 - D:\extracted-drivers\dax3_ext_qc_dolbyatmos_dolbyaccessoem.inf: The driver package was successfully installed.
Installing 2 of 133 - D:\extracted-drivers\dax3_qc_ext_bt.inf: The driver package was successfully installed.
Installing 3 of 133 - D:\extracted-drivers\dax3_swc_aposvc_arm64.inf: The driver package was successfully installed.
Installing 4 of 133 - D:\extracted-drivers\dax3_swc_hsa_arm64.inf: The driver package was successfully installed.
Installing 5 of 133 - D:\extracted-drivers\HalExtQCWdogTimer8180.inf: The driver package was successfully installed.
...
...
Installing 132 of 133 - D:\extracted-drivers\SurfaceVirtualFunctionEnum.inf: The driver package was successfully installed.
Installing 133 of 133 - D:\extracted-drivers\WbfUsbDriver.inf: The driver package was successfully installed.
The operation completed successfully.

Step 16: Reboot and complete installation

Remove the USB drive and reboot your Surface Pro X. You should now have a clean installation of Windows 11 with all necessary drivers.

References