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
Fixes (2)
Make room in the System Reserved partition
The Secure Boot or a cumulative update fails. This deletes files from a system partition — read every step before starting.
Check how much free space the partition actually has.
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.
Give the partition a temporary drive letter so you can see inside it.
$p = Get-Partition | Where-Object { $_.IsSystem -and -not $_.DriveLetter } | Select-Object -First 1Set-Partition -InputObject $p -NewDriveLetter Y
On a BIOS/MBR machine, the space is nearly always old language folders under Y:\Boot. Delete everything except en-GB and en-US.
Get-ChildItem Y:\Boot -Directory | Where-Object Name -notin 'en-GB','en-US','Fonts','Resources' | Select-Object NameLook 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.
Remove them once you have read the list.
Get-ChildItem Y:\Boot -Directory | Where-Object Name -notin 'en-GB','en-US','Fonts','Resources' | Remove-Item -Recurse -ForceOn a UEFI machine the partition is the EFI System Partition instead. Clear the font cache there, which is usually the bulk of it.
Remove-Item 'Y:\EFI\Microsoft\Boot\Fonts\*' -Force -ErrorAction SilentlyContinueRemove the temporary drive letter again — leaving it assigned exposes the boot partition in Explorer.
Remove-PartitionAccessPath -InputObject $p -AccessPath 'Y:\'Retry the update.
Get-Volume | Where-Object FileSystemLabel -eq 'System Reserved' | Format-Table @{n='FreeMB';e={[int]($_.SizeRemaining/1MB)}}Clear the network obstruction and repair .NET
A VPN or proxy is present, or a .NET update is the one failing.
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.
Check the WinHTTP proxy, which is what the update service uses rather than the browser's setting.
netsh winhttp show proxyClear it if it should not be there.
netsh winhttp reset proxyFor a .NET failure, repair the installed version with Microsoft's .NET Repair Tool before retrying.
Reset the update cache and retry.
Stop-Service wuauserv, bits -ForceRename-Item C:\Windows\SoftwareDistribution SoftwareDistribution.oldStart-Service bits, wuauserv
Get-WinEvent -LogName 'Setup' -MaxEvents 20 | Format-Table TimeCreated, Id, Message -AutoSizeReference
Related faults
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.