Issue
Windows Update or Windows Setup starts normally, checks the computer, and then refuses or rolls back the update because it cannot place new boot or servicing files on the existing system partition. On a GPT installation, that partition is normally the EFI System Partition (ESP). On an MBR installation, it is normally the NTFS partition labeled System Reserved. The partition can be present, correctly typed, and bootable yet have too little free space for the attempted update.
This is a capacity problem, not a reason to recreate boot files or repartition the disk. This procedure detects the partition style and current system partition, records its contents and free space, and first checks for a Microsoft superseding update. A retired Microsoft procedure that removes backed-up boot-font files is retained as a clearly labeled legacy fallback, not presented as current Microsoft guidance. The article does not resize, move, format, convert, create, or delete a partition.
Searchable Windows error codes and exact messages
| Displayed identifier | Windows name or exact message | When it can apply |
|---|---|---|
| No numeric code | We couldn't update the system reserved partition | The strongest user-visible match. Windows Setup could not update the existing startup partition. Confirm lack of free space before deleting anything because an incorrect partition type or another boot-layout fault can produce a similar failure. |
0xC1900104 | MOSETUP_E_PROCESS_TIMEOUT / The installation process did not complete within the required time limit | This is a Modern Setup timeout, not an ESP/SRP-capacity code. It belongs here only if the same attempt also displays the reserved-partition message or its logs independently prove insufficient system-partition space. |
0x800F0922 | CBS_E_INSTALLERS_FAILED | A CBS installer failed. Limited ESP space is one possible context, but connection, VPN, servicing, Secure Boot task, and other installer failures also use this code. Require the exact partition message, the current CBS signature below, or measured and logged system-partition shortage. |
Win32 112 (0x70) | ERROR_DISK_FULL / There is not enough space on the disk | In the documented May 2026 Windows 11 ESP issue, CBS recorded ServicingBootFiles failed. Error = 0x70 after its ESP space check. Use only with the matching CBS context; 0x70 on another volume does not identify the ESP. |
| No numeric code | CBS phrase SpaceCheck: Insufficient free space | Strong current evidence when the surrounding CBS entries identify boot-file servicing and the verified ESP. |
| No numeric code | CBS phrase SpaceCheck: ... used by third-party/OEM files outside of Microsoft boot directories | Shows that the servicing space check measured non-Microsoft content. Do not delete the named OEM content without the computer manufacturer's instructions. |
| No numeric code | Setup log phrase InsufficientSystemPartitionDiskSpace | Direct setup evidence that the capacity check blocked the upgrade. Record the Required and Available values when the log supplies them. |
| No numeric code | Setup log component CFreeSystemPartitionDiskSpaceChecker and text such as Not enough space on partition | Directly links the failure to the partition-space check. It is more diagnostic than 0x800F0922 alone. |
Do not add 0xC1900201, a generic compatibility message, or another code merely because an internet result mentions a reserved partition. Record only the code, phrase, phase, and path actually displayed on this computer.
Applies when
Use this procedure when all of the following are true:
- Windows 10 or Windows 11 still starts.
- An update, feature upgrade, or in-place repair fails with We couldn't update the system reserved partition, or Setup logs explicitly report insufficient system-partition space.
- The current Windows system partition is detectable and correctly identified.
- The system partition exists and contains a readable Windows BCD store and boot files.
- Measurement shows that the partition has little free space, and either a current Microsoft superseding fix applies or its boot-font directory contains enough files that the retired legacy cleanup could materially increase the free space.
The total size of the partition is not the diagnosis. A small partition can still have enough free space; a larger partition can be full. Measure SizeRemaining or the exact bytes free.
Does not apply when
Do not use this procedure when:
- Only
0x800F0922is present and there is no partition message, no capacity entry in Setup logs, and no measured shortage. - The update fails while downloading, while connected through a VPN, or with a different servicing error and the system partition has adequate free space.
- The existing FAT32 partition has the wrong GPT type. That is the separate BP-034 type-correction branch handled by FIX-033.
- The EFI System Partition or System Reserved partition is missing, unreadable, damaged, on an intermittently disappearing disk, or does not contain the current BCD store.
- Windows does not start. Recover startup first; do not edit a boot partition while its role remains uncertain.
- The partition reported as short of space is the Windows Recovery partition. This article does not resize WinRE or delete
winre.wim. - The proposed fix requires shrinking another volume, moving a partition, converting GPT/MBR, or using a third-party partition editor.
- More than one disk contains plausible active system partitions and the partition used by the running Windows installation cannot be proven.
Information that may remain unknown
The program that consumed the space, the exact historical partition size chosen by the OEM, and the exact Windows build on which the partition was created may remain unknown. The update's precise build is useful but is not required when the exact partition-capacity message and measured shortage agree.
The following may not remain unknown:
- the exact displayed update code and message;
- whether the Windows disk is GPT or MBR;
- which partition is the system partition for the running Windows installation;
- that partition's file system, total size, and free space before cleanup;
- the exact directory being listed, backed up, and cleaned;
- whether the BCD and font backup completed before deletion; and
- whether permissions were restored on the MBR/NTFS branch.
Requirements
- An administrator account in the Windows installation that is being updated
- A verified backup of important user data
- At least several hundred megabytes free on
%SystemDrive%for the small evidence and rollback folder - Disk Management and an elevated Command Prompt
- A currently bootable Windows 10/11 installation
- The exact update or upgrade available for one controlled retry
- An unused temporary drive letter; examples below use
Y:only after proving it is unused - Permission to stop and escalate if the system partition, BCD path, file system, or ACL backup differs from the documented branches
The standing BitLocker assumption remains in force: the Windows installation is already unlocked. Do not suspend protection merely to inspect free space or delete the backed-up boot-font files.
Starting position
-
Restart Windows once. Do not begin while another update reports Restart required.
-
Record the failed update name, date, displayed code, and complete message. In Windows 11, open Settings > Windows Update > Update history. In Windows 10, open Settings > Update & Security > Windows Update > View update history. If Windows Setup displayed a separate dialog, record that wording too.
-
Create the evidence and rollback folder from an elevated Command Prompt:
md "%SystemDrive%\SRP-font-backup"If the folder already exists from a previous attempt, stop and rename that existing folder through File Explorer before creating a new empty one. Do not overwrite an unverified earlier backup.
-
Record the current disk and volume map without changing it:
diskpart list disk list volume exitCopy or photograph the complete output.
-
Confirm that
Y:is unused. In File Explorer, it must not identify a current drive. In the elevated Command Prompt, this command should report that the system cannot find the drive:dir Y:\If
Y:already exists, select another unused letter and substitute it for everyY:in this article. Never replace an existing drive letter. -
Open Disk Management by running:
diskmgmt.msc -
Locate the volume containing the running Windows installation, then note its physical disk number. In Disk Management terminology, the running Windows volume is commonly marked Boot even though the separate partition holding startup files is marked System. Do not confuse those labels.
-
Right-click the physical disk label, such as Disk 0, choose Properties > Volumes, and record Partition style:
- GUID Partition Table (GPT) routes to the GPT/FAT32 branch.
- Master Boot Record (MBR) routes to the MBR/NTFS branch.
-
Do not change firmware mode. GPT/MBR and the detectable partition layout determine the cleanup branch; the user does not need to know or alter a firmware setting.
Confirm the diagnosis
-
Check whether Windows Setup preserved a capacity finding. In an elevated Command Prompt, run each command; a missing log is acceptable and should simply be recorded:
findstr /i /c:"InsufficientSystemPartitionDiskSpace" /c:"CFreeSystemPartitionDiskSpaceChecker" /c:"Not enough space on partition" "%SystemDrive%\$WINDOWS.~BT\Sources\Panther\setupact.log" findstr /i /c:"InsufficientSystemPartitionDiskSpace" /c:"CFreeSystemPartitionDiskSpaceChecker" /c:"Not enough space on partition" "%SystemDrive%\$WINDOWS.~BT\Sources\Panther\setuperr.log" findstr /i /c:"SpaceCheck: Insufficient free space" /c:"ServicingBootFiles failed. Error = 0x70" /c:"used by third-party/OEM files outside of Microsoft boot directories" "%SystemRoot%\Logs\CBS\CBS.log" -
Interpret that evidence:
- If either log names the capacity checker or reports required and available bytes, save the complete matching line.
- If the logs have already been removed but the exact UI message is We couldn't update the system reserved partition, continue to partition measurement.
- If the only evidence is
0x800F0922, do not assume capacity. Run the Windows Update troubleshooter and investigate its other documented causes first.
-
For GPT, mount the current EFI System Partition at the unused temporary letter:
mountvol Y: /S fsutil fsinfo volumeinfo Y: dir /a Y:\ dir /a Y:\EFI\Microsoft\BootThe second and third commands must show a FAT-style system volume and the Microsoft boot directory. If
mountvolfails, the directory is absent, or the mounted partition does not match the current Windows boot path, stop. Do not create the directory. -
For MBR, use Disk Management to locate the partition marked System Reserved and System, Active on the same disk as the running Windows installation. Confirm that it is NTFS. Assign the unused temporary letter through Change Drive Letter and Paths > Add. Then verify:
fsutil fsinfo volumeinfo Y: dir /a Y:\ dir /a Y:\BootIf the partition is FAT/FAT32, is not marked as the current System partition, lacks
Y:\Boot, or is on an unproven disk, remove the temporary letter and stop. Do not run the NTFS permission commands on a FAT volume. -
Measure and record the partition before changing anything:
fsutil volume diskfree Y: dir /a /s Y:\ > "%SystemDrive%\SRP-font-backup\partition-list-before.txt" -
Verify the BCD path and export the current system store.
GPT:
dir /a Y:\EFI\Microsoft\Boot\BCD bcdedit /store Y:\EFI\Microsoft\Boot\BCD /enum all /v > "%SystemDrive%\SRP-font-backup\bcd-enum-before.txt" copy /y Y:\EFI\Microsoft\Boot\BCD "%SystemDrive%\SRP-font-backup\BCD-before"MBR:
dir /a Y:\Boot\BCD bcdedit /store Y:\Boot\BCD /enum all /v > "%SystemDrive%\SRP-font-backup\bcd-enum-before.txt" copy /y Y:\Boot\BCD "%SystemDrive%\SRP-font-backup\BCD-before"Stop if the BCD copy or enumeration fails. This article requires a readable backup before touching files on the system partition.
-
Confirm the cleanup target without deleting it.
GPT:
dir /a /s Y:\EFI\Microsoft\Boot\FontsMBR:
dir /a /s Y:\Boot\Fonts -
Continue only if the exact partition error or log evidence and the measured shortage agree, the current BCD is backed up, and the expected Fonts directory contains files. If the directory is empty or missing, deleting fonts cannot free space; dismount/remove the temporary letter and stop.
Resolution steps
Branch 0 — Prefer a published Microsoft superseding fix for the exact failed update
-
Before deleting boot-font files, check the Microsoft release information for the exact KB and Windows build recorded in section 6.
-
If Microsoft identifies that exact update as failing on devices with limited ESP free space and names a later cumulative update as the resolution, install the later applicable cumulative update through Windows Update or the Microsoft Update Catalog instead of editing the ESP first. For example, Microsoft documented the May 2026 Windows 11
KB5089549failure on devices—especially those with about 10 MB or less free on the ESP—and resolved it inKB5089573; that threshold is evidence for that issue, not a universal ESP minimum. -
Restart and verify the later update. If it installs and the original update is now superseded, stop; no partition cleanup is needed.
-
Continue to the layout-specific cleanup only when no applicable published superseding fix exists, the newer update produces the same proven capacity failure, or the exact message and measured shortage apply to a feature upgrade rather than a superseded quality update.
Branch A — Legacy font-cleanup fallback on a verified GPT/FAT32 ESP
The boot-font deletion below came from a retired Microsoft procedure whose current page redirects. It is not current first-line Microsoft guidance. Use it only after Branch 0 is unavailable, the capacity evidence is strong, every target file is backed up, and the choice between this bounded legacy fallback and qualified partition/OEM support is explicitly accepted.
-
Copy every boot-font file to the normal Windows volume before deletion:
robocopy Y:\EFI\Microsoft\Boot\Fonts "%SystemDrive%\SRP-font-backup\EFI-Fonts" /E /COPY:DAT /DCOPY:DAT /R:0 /W:0 -
Read the Robocopy summary. Confirm that the backup directory contains files and that the
FAILEDcount is zero:dir /a /s "%SystemDrive%\SRP-font-backup\EFI-Fonts"Stop if the source contained files but the backup does not, or if Robocopy reports a failed copy.
-
Change to the exact legacy cleanup directory and prove the prompt location:
cd /d Y:\EFI\Microsoft\Boot\Fonts echo %CD% dir /aThe
echooutput must be exactlyY:\EFI\Microsoft\Boot\Fontsexcept for the substituted temporary letter. Stop if it is not. -
Delete only the files in that Fonts directory using the retired legacy cleanup operation:
del *.*If prompted to continue, check the prompt path again, then answer
Y. Do not userd, do not delete the Fonts directory itself, and do not delete anything elsewhere underEFI. -
Verify that only the directory contents were removed and remeasure free space:
dir /a Y:\EFI\Microsoft\Boot\Fonts fsutil volume diskfree Y: dir /a Y:\EFI\Microsoft\Boot\BCD -
Record the new bytes free. If it did not increase, do not delete another directory. Restore the fonts from section 11 and stop.
-
Leave the mounted volume, dismount it, and restart Windows:
cd /d %SystemDrive%\ mountvol Y: /D shutdown /r /t 0 -
After Windows starts, retry the same update once. Do not run multiple update attempts while the result is unknown.
Branch B — Legacy font-cleanup fallback on a verified MBR/NTFS System Reserved partition
This branch is primarily for Windows 10 legacy-BIOS installations. It is retained from retired Microsoft documentation and changes protected NTFS permissions temporarily. If exact security-descriptor capture and restoration cannot be completed, do not use it.
-
Change to the Fonts directory and prove the prompt location:
cd /d Y:\Boot\Fonts echo %CD% dir /aThe
echooutput must be exactlyY:\Boot\Fonts. Stop if it is not. Also stop ifdir /adshows any child directory; this bounded fallback deletes only files directly inFontsand does not authorize recursive cleanup. -
Before changing ownership, capture the exact owner and security descriptor of the Fonts directory, plus each file's owner/full SDDL and an independent ACL backup:
powershell -NoProfile -Command "$p='Y:\Boot\Fonts'; $a=Get-Acl -LiteralPath $p; Set-Content -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-owner-before.txt\" -Value $a.Owner; Set-Content -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-sddl-before.txt\" -Value $a.Sddl; $rows=@(Get-ChildItem -LiteralPath $p -Force -File | ForEach-Object {$fa=Get-Acl -LiteralPath $_.FullName; [pscustomobject]@{RelativePath=$_.Name;Owner=$fa.Owner;Sddl=$fa.Sddl}}); if($rows.Count -eq 0){throw 'No font files found'}; $rows | Export-Csv -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-file-security-before.csv\" -NoTypeInformation" icacls Y:\Boot\Fonts\* /save "%SystemDrive%\SRP-font-backup\Fonts-acls-before.txt" /c /t type "%SystemDrive%\SRP-font-backup\Fonts-owner-before.txt" type "%SystemDrive%\SRP-font-backup\Fonts-sddl-before.txt" type "%SystemDrive%\SRP-font-backup\Fonts-file-security-before.csv"Stop if either directory owner/SDDL file is empty, the per-file CSV or ACL backup is absent, the CSV contains no data rows, or
icaclsreports a failed source file.icacls /savedoes not preserve ownership; the per-file full-SDDL capture is mandatory for an exact rollback. -
Take ownership of the Fonts directory only for the legacy operation. Do not recursively change the file owners. The final period is part of the command:
takeown /f .Stop if
takeownreports failure. Do not add/r; recursive ownership would change every font file's owner. -
Obtain the exact current account name and SID:
whoami whoami /user -
Substitute that complete output, including any
domain\or computer-name prefix, in the next command:icacls . /grant "<exact-output-from-whoami>":(OI)(CI)F /tRequire zero failed files. From this point until deletion begins, every failed check or stop path must run the following permission-only cleanup before removing
Y:or rebooting. It restores every still-present file's saved full SDDL/owner and then the directory descriptor, and verifies the temporary ACE is gone:powershell -NoProfile -Command "$p='Y:\Boot\Fonts'; $rows=@(Import-Csv -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-file-security-before.csv\"); if($rows.Count -eq 0){throw 'Per-file security backup is empty'}; foreach($r in $rows){$q=Join-Path $p $r.RelativePath; if(-not (Test-Path -LiteralPath $q -PathType Leaf)){throw \"Expected pre-deletion file is missing: $q\"}; $a=Get-Acl -LiteralPath $q; $a.SetSecurityDescriptorSddlForm($r.Sddl); Set-Acl -LiteralPath $q -AclObject $a}; $saved=(Get-Content -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-sddl-before.txt\" -Raw).Trim(); $d=Get-Acl -LiteralPath $p; $d.SetSecurityDescriptorSddlForm($saved); Set-Acl -LiteralPath $p -AclObject $d; $now=Get-Acl -LiteralPath $p; $owner=(Get-Content -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-owner-before.txt\" -Raw).Trim(); if($now.Sddl -ne $saved -or $now.Owner -ne $owner){throw 'Directory security verification failed'}; foreach($r in $rows){$q=Join-Path $p $r.RelativePath; $a=Get-Acl -LiteralPath $q; if($a.Sddl -ne $r.Sddl -or $a.Owner -ne $r.Owner){throw \"File security verification failed: $q\"}}; 'Pre-deletion file and directory security restored and verified'" icacls Y:\Boot\FontsIf the grant is partial/fails or this cleanup cannot verify every file and the directory, leave
Y:mounted and obtain qualified help. Do not proceed to deletion. -
Back up every file in the cleanup directory:
robocopy Y:\Boot\Fonts "%SystemDrive%\SRP-font-backup\MBR-Fonts" /E /COPY:DAT /DCOPY:DAT /R:0 /W:0 dir /a /s "%SystemDrive%\SRP-font-backup\MBR-Fonts"Confirm that the source files are represented in the backup and Robocopy's
FAILEDcount is zero. If not, run the permission-only cleanup from step 5 and stop. -
Reconfirm the exact prompt location:
cd /d Y:\Boot\Fonts echo %CD% dir /aIf the location or listing differs from the verified target, run the permission-only cleanup from step 5 and stop before deletion.
-
Delete only the boot-font files:
del *.*Confirm only when the prompt is
Y:\Boot\Fonts. Do not remove the Fonts directory, BCD,bootmgr, or any language directory. -
Prove that no file survived the delete:
dir /a-d /b Y:\Boot\FontsThe command must produce no filename. If any hidden, system, read-only, or other file remains, do not continue with a partially cleaned directory. Use section 11 to restore all backed-up font content and every saved file/directory security descriptor, verify that rollback completely, and stop.
-
With the directory empty, restore its exact pre-change security descriptor, which includes the recorded owner and removes the temporary user ACE:
powershell -NoProfile -Command "$p='Y:\Boot\Fonts'; $f=\"$env:SystemDrive\SRP-font-backup\Fonts-sddl-before.txt\"; $saved=(Get-Content -LiteralPath $f -Raw).Trim(); $a=Get-Acl -LiteralPath $p; $a.SetSecurityDescriptorSddlForm($saved); Set-Acl -LiteralPath $p -AclObject $a; $now=(Get-Acl -LiteralPath $p).Sddl; if($now -ne $saved){throw 'Security descriptor verification failed'}; 'Security descriptor restored and verified'"
icacls Y:\Boot\Fonts
Continue only when PowerShell prints Security descriptor restored and verified and icacls no longer shows the temporary account grant. Any partial or failed permission restoration is a stop condition; obtain qualified help before rebooting.
-
Verify the BCD remains present and remeasure free space:
dir /a Y:\Boot\BCD dir /a Y:\Boot\Fonts fsutil volume diskfree Y: -
Return to Disk Management, choose Action > Refresh, and record the new free-space value. Remove only the temporary
Y:drive letter from the verified System Reserved partition through Change Drive Letter and Paths > Remove. Do not delete the volume. -
Restart Windows and retry the same update once.
Branch C — Cleanup completes but the update still reports insufficient system-partition space
-
Do not delete boot language directories, BCD stores, recovery files, OEM folders, or arbitrary files in the root.
-
Preserve:
- the before/after free-space values;
- the partition listing;
- the BCD export and copy;
- the font backup;
- the exact update code and message; and
- the Setup log line containing required and available space, if present.
-
Stop this procedure. The remaining repair may require an OEM-supported layout change, a Microsoft-supported installation path, or specialist partition work. Resizing or moving the system partition is intentionally outside this article.
Expected results and branches
- The same update succeeds after one retry: the capacity diagnosis is strongly supported. Keep the evidence and font backup until the update has completed and two normal restarts succeed.
- Free space increases but the exact partition error remains: the cleanup was real but insufficient, or Setup is targeting a different system partition. Use Branch C; do not keep deleting boot files.
- Free space does not increase: the wrong directory may have been targeted, the files were sparse/already absent, or the partition accounting is damaged. Restore the fonts and stop.
- The code changes from
0x800F0922to a different error: treat the new code and phase as new evidence. Do not continue the capacity repair automatically. - Windows no longer starts: stop. Do not initialize, format, or recreate the partition. Use WinRE and the preserved BCD evidence with the matching boot-repair article.
- The MBR ACL restore fails: do not hide or remove the temporary drive letter and pretend the repair completed. Preserve the session and obtain qualified help to restore permissions and ownership.
Do not do this
- Do not resize, extend, shrink, move, clone, convert, format, or delete any partition in this procedure.
- Do not use DiskPart
clean,convert,create partition,delete partition,format, oractive. - Do not delete the entire
EFI,Microsoft,Boot,Recovery, language, or OEM directory. - Do not delete
BCD,bootmgfw.efi,bootmgr,memtest.efi, orwinre.wimto make space. - Do not run the MBR
takeown/icaclssequence on FAT/FAT32. - Do not grant
Everyonefull control or leave the system partition mounted with a drive letter. - Do not treat the nominal partition size as proof that it is full.
- Do not treat
0x800F0922alone as proof of an SRP/ESP problem. - Do not suspend BitLocker, change Secure Boot, change firmware mode, or rebuild BCD for a confirmed capacity-only failure.
- Do not delete the backup until the update and two subsequent restarts have been verified.
Rollback
Restore the GPT/FAT32 boot fonts
-
Open an elevated Command Prompt and confirm the temporary letter is unused.
-
Mount the current EFI System Partition:
mountvol Y: /S dir /a Y:\EFI\Microsoft\Boot\BCD -
Restore only the backed-up Fonts directory contents:
robocopy "%SystemDrive%\SRP-font-backup\EFI-Fonts" Y:\EFI\Microsoft\Boot\Fonts /E /COPY:DAT /DCOPY:DAT /R:0 /W:0 dir /a /s Y:\EFI\Microsoft\Boot\Fonts -
Require a zero
FAILEDcount, then dismount:mountvol Y: /D
Restore the MBR/NTFS boot fonts
-
Reassign the same temporary letter to the verified System Reserved partition in Disk Management.
-
From an elevated Command Prompt, prove the directory and confirm that all four permission/security backups from section 8 exist and are nonempty:
cd /d Y:\Boot\Fonts echo %CD% type "%SystemDrive%\SRP-font-backup\Fonts-owner-before.txt" type "%SystemDrive%\SRP-font-backup\Fonts-sddl-before.txt" type "%SystemDrive%\SRP-font-backup\Fonts-file-security-before.csv" dir /a "%SystemDrive%\SRP-font-backup\Fonts-acls-before.txt"Stop if the prompt is not exactly
Y:\Boot\Fonts, any backup is missing, either text file is empty, or the CSV has no file rows. -
Take temporary ownership and grant only the exact current account access, as in section 8:
takeown /f . whoami -
Run the account-specific grant with the exact
whoamioutput, then restore the files:icacls . /grant "<exact-output-from-whoami>":(OI)(CI)F /t robocopy "%SystemDrive%\SRP-font-backup\MBR-Fonts" Y:\Boot\Fonts /E /COPY:DAT /DCOPY:DAT /R:0 /W:0 dir /a /s Y:\Boot\FontsRequire a zero
FAILEDcount and confirm that the restored file count matches the backup before continuing. -
Restore the saved per-file ACLs, every original per-file owner/full SDDL, and the directory's exact pre-change descriptor. Do not replace any recorded owner with an assumed
SYSTEMowner:icacls Y:\Boot\Fonts /restore "%SystemDrive%\SRP-font-backup\Fonts-acls-before.txt" /c /t powershell -NoProfile -Command "$p='Y:\Boot\Fonts'; $csv=\"$env:SystemDrive\SRP-font-backup\Fonts-file-security-before.csv\"; $rows=@(Import-Csv -LiteralPath $csv); if($rows.Count -eq 0){throw 'Per-file security backup is empty'}; foreach($r in $rows){$q=Join-Path $p $r.RelativePath; if(-not (Test-Path -LiteralPath $q -PathType Leaf)){throw \"Missing restored file: $q\"}; $a=Get-Acl -LiteralPath $q; $a.SetSecurityDescriptorSddlForm($r.Sddl); Set-Acl -LiteralPath $q -AclObject $a}; $saved=(Get-Content -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-sddl-before.txt\" -Raw).Trim(); $d=Get-Acl -LiteralPath $p; $d.SetSecurityDescriptorSddlForm($saved); Set-Acl -LiteralPath $p -AclObject $d; $now=Get-Acl -LiteralPath $p; $owner=(Get-Content -LiteralPath \"$env:SystemDrive\SRP-font-backup\Fonts-owner-before.txt\" -Raw).Trim(); if($now.Sddl -ne $saved -or $now.Owner -ne $owner){throw 'Directory security verification failed'}; foreach($r in $rows){$q=Join-Path $p $r.RelativePath; $a=Get-Acl -LiteralPath $q; if($a.Sddl -ne $r.Sddl -or $a.Owner -ne $r.Owner){throw \"File security verification failed: $q\"}}; \"Directory and $($rows.Count) file security descriptors restored and verified\"" icacls Y:\Boot\FontsContinue only if
icacls /restorereports no failed files, PowerShell reports that the directory and every file descriptor were restored and verified, andicaclsno longer shows the temporary account grant. A partial permission or owner restore is a failed rollback. -
Verify the files and BCD, then remove the temporary drive letter in Disk Management:
dir /a /s Y:\Boot\Fonts dir /a Y:\Boot\BCD
If any backup is missing, Robocopy reports failed files, the file count does not match, any ACL restoration fails, or the owner/SDDL comparison fails, stop with the partition still mounted. Do not improvise a rollback by copying boot files from another computer or another Windows build.
Verification
-
Confirm the temporary system-partition letter is gone after restart.
-
Start Windows normally twice. A successful single boot is useful; two cold or normal restarts reduce the chance that a one-time firmware fallback hid a problem.
-
Open an elevated Command Prompt and verify the current boot manager can be enumerated:
bcdedit /enum {bootmgr} -
Open Settings > Windows Update > Update history and confirm that the exact previously failing update now reports successful installation.
-
Record the final Windows version with:
winver -
Confirm there is no new
0xC1900104,0x800F0922, or We couldn't update the system reserved partition entry for the controlled retry. -
Retain
%SystemDrive%\SRP-font-backupthrough at least two successful restarts and one normal shutdown/start cycle. Delete it only after the machine, recovery path, and update state are known good.
Confidence and stop conditions
Confidence is approximately 80% when the exact partition message or Setup capacity checker is present, the current system partition and BCD are proven, measured free space is low, the bounded legacy font cleanup increases free space, and the same update succeeds on the next controlled retry.
Confidence is low when the only evidence is 0x800F0922, the update failed in a different phase, the system partition has substantial free space, or more than one plausible startup partition exists.
Stop immediately if:
- the current system partition cannot be proven;
- the BCD cannot be enumerated and copied;
- the expected Fonts directory is missing or already empty;
- the backup contains fewer files than the source or reports failed copies;
- GPT/MBR or FAT32/NTFS does not match the selected branch;
takeown, the ACL backup, ACL restore, or owner restoration fails materially;- free space does not increase after the one bounded legacy deletion;
- the same error remains after one retry;
- Windows fails to start; or
- any next step would require resizing, moving, formatting, or deleting a partition.