Windows · Windows Server  ·  medium  ·  Windows Update & servicing

0x800f0922 — update fails, System Reserved partition full or no route to Microsoft

Two unrelated faults share this code: the System Reserved partition has no room for the update's boot files, or the machine cannot reach Microsoft's servers to finish the transaction.

What you see

Cumulative updates, .NET updates or the KB5012170 Secure Boot DBX update fail at install or at the restart stage with 0x800f0922.

What is actually wrong

Either the 100–500 MB System Reserved partition is full of old language packs and fonts, or a VPN, proxy or firewall is blocking the update endpoints. On Server, a failed .NET install is the usual third cause.

Codes and articles

0x800f0922800f0922CBS_E_INSTALLERS_FAILEDKB5012170KB4023057

Fixes (2)

Make room in the System Reserved partition
Elevated PowerShell25 minutesmedium risknot reversible

The Secure Boot or a cumulative update fails. This deletes files from a system partition — read every step before starting.

  1. Check how much free space the partition actually has.

    PowerShell
    Get-Partition | Where-Object { $_.Type -eq 'System' -or $_.IsSystem } | Get-Volume | Format-Table DriveLetter, FileSystemLabel, @{n='FreeMB';e={[int]($_.SizeRemaining/1MB)}}, @{n='SizeMB';e={[int]($_.Size/1MB)}}

    The update needs roughly 15 MB free here. Anything under about 40 MB will fail, and the error says nothing about disk space.

  2. Give the partition a temporary drive letter so you can see inside it.

    PowerShell
    $p = Get-Partition | Where-Object { $_.IsSystem -and -not $_.DriveLetter } | Select-Object -First 1Set-Partition -InputObject $p -NewDriveLetter Y
  3. On a BIOS/MBR machine, the space is nearly always old language folders under Y:\Boot. Delete everything except en-GB and en-US.

    PowerShell
    Get-ChildItem Y:\Boot -Directory | Where-Object Name -notin 'en-GB','en-US','Fonts','Resources' | Select-Object Name

    Look at the list before deleting anything. These are boot-time localisation files; removing the one your firmware uses leaves a machine that boots to a blank screen.

  4. Remove them once you have read the list.

    PowerShell
    Get-ChildItem Y:\Boot -Directory | Where-Object Name -notin 'en-GB','en-US','Fonts','Resources' | Remove-Item -Recurse -Force
  5. On a UEFI machine the partition is the EFI System Partition instead. Clear the font cache there, which is usually the bulk of it.

    PowerShell
    Remove-Item 'Y:\EFI\Microsoft\Boot\Fonts\*' -Force -ErrorAction SilentlyContinue
  6. Remove the temporary drive letter again — leaving it assigned exposes the boot partition in Explorer.

    PowerShell
    Remove-PartitionAccessPath -InputObject $p -AccessPath 'Y:\'
  7. Retry the update.

Confirm it workedThe partition has 50 MB or more free and the update installs.
PowerShell
Get-Volume | Where-Object FileSystemLabel -eq 'System Reserved' | Format-Table @{n='FreeMB';e={[int]($_.SizeRemaining/1MB)}}
If you need to undo itDeleted boot files cannot be restored in place. If the machine will not boot afterwards, repair the boot files from installation media with bcdboot C:\Windows /s Y: /f ALL.
Clear the network obstruction and repair .NET
Elevated PowerShell25 minuteslow riskreversible

A VPN or proxy is present, or a .NET update is the one failing.

  1. Disconnect any VPN client completely, not just the tunnel — some leave a route in place.

    The update transaction has to reach Microsoft's servers to validate; a split-tunnel that captures those routes fails it with this code.

  2. Check the WinHTTP proxy, which is what the update service uses rather than the browser's setting.

    Command Prompt
    netsh winhttp show proxy
  3. Clear it if it should not be there.

    Command Prompt
    netsh winhttp reset proxy
  4. For a .NET failure, repair the installed version with Microsoft's .NET Repair Tool before retrying.

  5. Reset the update cache and retry.

    PowerShell
    Stop-Service wuauserv, bits -ForceRename-Item C:\Windows\SoftwareDistribution SoftwareDistribution.oldStart-Service bits, wuauserv
Confirm it workedThe update installs and the history shows Succeeded.
PowerShell
Get-WinEvent -LogName 'Setup' -MaxEvents 20 | Format-Table TimeCreated, Id, Message -AutoSize
If you need to undo itRestore the proxy with netsh winhttp set proxy if other traffic needed it.

Where this stops. This write-up was written and checked by hand. It says what each step changes, how to confirm it worked and how to reverse it, and anything destructive is flagged before you reach it. If it does not match what your machine is doing, search the Support Centre for the exact code or message — and when something needs a person, get in touch.