Issue
Windows Setup begins an in-place feature update or version upgrade, restarts one or more times, then rolls back to the previous working installation and reports 0xC1900101 alone or with an extend code. 0xC1900101 is a generic rollback result most often associated with a driver, a device, or low-level third-party software. It does not identify which component failed.
This procedure preserves the rollback evidence, determines the failed Setup phase, identifies a driver, filter, device, or service when the logs support one, and changes only that blocker before another controlled attempt. It is the general 0xC1900101 procedure. Use FIX-063 when the complete result is 0xC1900101-0x30018.
Searchable Windows error codes and exact messages
| Displayed identifier | Windows phase or common displayed message | How it is used here |
|---|---|---|
0xC1900101 | Commonly followed by We couldn't install Windows or We’ve set your PC back to the way it was right before you started installing Windows | Generic rollback family. It supports log collection, not a particular fix. |
0xC1900101-0x20004 | The installation failed in the SAFE_OS phase with an error during INSTALL_RECOVERY_ENVIRONMENT operation | Often driver-related. Preserve SafeOS and rollback evidence; do not assume the recovery partition is the cause. |
0xC1900101-0x2000C | SAFE_OS/WinPE image-apply failure | Disconnect nonessential peripherals and investigate the driver named by Setup evidence. |
0xC1900101-0x20017 | The installation failed in the SAFE_OS phase with an error during BOOT operation | A driver, storage path, filter, or hardware configuration may have prevented the temporary SafeOS from booting. |
0xC1900101-0x30018 | The installation failed in the FIRST_BOOT phase with an error during SYSPREP_SPECIALIZE operation | Route to FIX-063. setupapi.dev.log is especially important. |
0xC1900101-0x3000D | The installation failed in the FIRST_BOOT phase with an error during MIGRATE_DATA operation | A display driver is a documented possibility, but the logs must identify the actual blocker. |
0xC1900101-0x4000D | The installation failed in the SECOND_BOOT phase with an error during MIGRATE_DATA operation | Check rollback event logs and setupmem.dmp for a stop code or named driver. |
0xC1900101-0x40017 | The installation failed in the SECOND_BOOT phase with an error during BOOT operation | Commonly a driver or filter conflict during the later boot phase. |
| No numeric code | Undoing changes made to your computer / Restoring your previous version of Windows | Confirms rollback activity but not the cause. Wait for rollback to finish; do not interrupt it. |
The extend code matters. A successful repair for 0x3000D does not prove the same action will repair 0x20017, 0x30018, or an unsuffixed 0xC1900101.
Applies when
Use this procedure when:
- the previous Windows 10 or Windows 11 installation starts normally after rollback;
- Setup, Windows Update history, SetupDiag, or a rollback log records
0xC1900101; - the intended operation was an in-place feature update, version upgrade, or repair upgrade;
- the target version and upgrade path are supported for the computer; and
- important data is backed up before another attempt.
The procedure can be used when the suffix was not shown, but confidence remains lower until SetupDiag or the logs reveal the failed phase and component.
Does not apply when
Do not use this as a generic cure for every Windows Update failure. It does not apply when the primary result is a hardware-eligibility code such as 0xC1900200, a disk-space code, a servicing-store code, an activation failure, or an ordinary cumulative-update error with no Setup rollback.
It also does not apply while rollback is still running, when the current Windows installation no longer starts, when the system disk is unstable or intermittently absent, or when Setup was started as a clean installation. A retry that selects Keep nothing is not an in-place-upgrade repair; it changes the operation and can remove apps, settings, and data.
Do not change AHCI, RAID, VMD, or another storage-controller mode merely because 0xC1900101 appeared. A storage-mode change is a separate, high-risk branch and requires direct evidence plus a proven bootable rollback path.
Information that may remain unknown
The exact Windows build that first introduced the conflict, the date the suspect driver was installed, and whether the blocker is a coding defect or an unsupported combination may remain unknown.
Before removing a driver or low-level application, the following may not remain unknown:
- the complete result and extend code, when recoverable;
- the last Setup phase and operation;
- the last fatal failure rather than the first warning;
- the device, published INF, service, filter, or module proposed as the blocker;
- why that component is being selected;
- how its current package or configuration will be restored; and
- whether the retry is intended to keep apps and files.
An exact target build becomes required when selecting installation media or a replacement driver. Firmware mode is not required unless the evidence points to a boot-path or storage branch.
Requirements
- An administrator account in the rolled-back Windows installation
- A verified backup of important files and recovery keys or credentials that might be needed by installed software
- Stable power and enough free space for Windows Setup according to its compatibility check
- The latest Microsoft SetupDiag executable, or the SetupDiag result already generated by Setup
- An evidence folder on the system disk or a healthy external drive
- Official Microsoft installation media for the intended target version if Windows Update repeatedly fails
- Exact-model OEM driver and firmware sources when a replacement is required
- A record of enabled third-party services and startup applications before clean boot
- Installation media or recovery media in case the next retry does not roll back cleanly
Do not proceed with a firmware or storage-controller change without a separate, model-specific recovery plan.
Starting position
Let rollback finish completely. Sign in to the restored Windows installation and confirm that ordinary files open. Do not immediately retry the upgrade; a retry can overwrite useful logs.
-
Open Terminal (Admin) or Command Prompt (Admin).
-
Create a unique evidence directory for this attempt on the detected online system drive:
for /f %I in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd-HHmmss"') do set "EVID=%SystemDrive%\UpgradeEvidence\FIX059-%I" md "%EVID%" echo %EVID% -
Download the latest Microsoft SetupDiag and save
SetupDiag.exedirectly in the displayed%EVID%directory. Record its file version. If download is unavailable, preserve the automatic result and defer the manual run rather than substituting a third-party copy. -
Copy every Setup folder that still exists. A missing folder is recorded as missing; it is not created or fabricated:
robocopy "%SystemDrive%\$Windows.~BT\Sources\Rollback" "%EVID%\Rollback" /E /COPY:DAT /R:1 /W:1 set "RC_ROLLBACK=%ERRORLEVEL%" robocopy "%SystemDrive%\$Windows.~BT\Sources\Panther" "%EVID%\Panther" /E /COPY:DAT /R:1 /W:1 set "RC_PANTHER=%ERRORLEVEL%" robocopy "%SystemRoot%\Panther" "%EVID%\Windows-Panther" /E /COPY:DAT /R:1 /W:1 set "RC_WINDOWS_PANTHER=%ERRORLEVEL%" if exist "%SystemRoot%\Logs\SetupDiag\SetupDiagResults.xml" (copy "%SystemRoot%\Logs\SetupDiag\SetupDiagResults.xml" "%EVID%\SetupDiagResults-automatic.xml") else (echo MISSING: automatic SetupDiag result>"%EVID%\SetupDiagResults-automatic-MISSING.txt") echo Rollback=%RC_ROLLBACK% Panther=%RC_PANTHER% Windows-Panther=%RC_WINDOWS_PANTHER%>"%EVID%\robocopy-exit-codes.txt"Robocopy exit codes 0–7 are nonfatal result classes; 8 or higher means at least one copy failure. Record a missing source directory explicitly. Do not merge a later attempt into this directory.
-
Capture the current system and driver inventory:
msinfo32 /nfo "%EVID%\msinfo32-before.nfo" driverquery /v /fo csv > "%EVID%\driverquery-before.csv" pnputil /? > "%EVID%\pnputil-help.txt" pnputil /enum-drivers /files > "%EVID%\pnputil-drivers-before.txt" systeminfo > "%EVID%\systeminfo-before.txt"If
/enum-drivers /filesis unsupported, rerunpnputil /enum-driversand save that output, then capture file details for the exact suspect package in Device Manager. Do not interpret an unsupported switch as an empty Driver Store. -
Photograph or save the complete error as shown in Settings > Windows Update > Update history and record the target version.
-
Download the replacement driver or official media before disconnecting network access. Do not obtain a driver from an unaffiliated driver-download site.
Confirm the diagnosis
-
Run the current SetupDiag from the evidence directory in an elevated prompt:
"%EVID%\SetupDiag.exe" /Output:"%EVID%\SetupDiagResults.log"If SetupDiag reports multiple failures, treat the last failure as the likely fatal failure until other evidence disproves it.
-
Open
SetupDiagResults.logand the automatic XML result, if present. Record:- matching rule;
- result code and extend code;
- last phase and last operation;
- named file, INF, service, driver, device, application, or compatibility block; and
- the log path and timestamp supporting the finding.
-
Open the rollback
setupact.logandsetuperr.log. Search upward from the final occurrence of0xC1900101, then correlate the same timestamp in both files. Useful search strings include:findstr /i /n /c:"0xC1900101" /c:"Shell application requested abort" /c:"Abandoning apply" "%EVID%\Rollback\setupact.log" findstr /i /n /c:"0xC1900101" /c:"error" /c:"fatal" "%EVID%\Rollback\setuperr.log"Warnings earlier in a long log are not automatically the cause.
-
If the extend code is
0x30018, stop this procedure and use FIX-063. PreserveRollback\setupapi\setupapi.dev.log. -
If the extend code is
0x3000D, inspect the migration logs and the display-device portion ofsetupapi.dev.log. A display driver is plausible, but proceed against it only if the log names its INF/device, SetupDiag names it, or the failure began immediately after that driver changed. -
If
setupmem.dmpexists, preserve it. Record any stop code and named module extracted by SetupDiag or a qualified dump analysis. Do not infer a module name from the numeric stop code alone. -
Map a named third-party INF to its provider and devices:
pnputil /enum-drivers /files pnputil /enum-devices /driversMatch the exact
oem##.inf, provider, class, version, and hardware ID. Do not remove every package from the same vendor. -
Check installed low-level applications: third-party antivirus, anti-ransomware, disk utilities, encryption filters, tuning tools, VPN filters, virtualization storage/network filters, and OEM management agents. Presence alone is not proof. Give priority to a component named in Setup evidence or installed immediately before the first repeatable failure.
-
Meet one of these thresholds before a component-specific removal:
- SetupDiag names the component and the underlying log agrees;
setupapi.dev.logrecords the failing device/INF at the fatal timestamp;- a rollback dump names the driver and the phase agrees;
- the same component is named across two independent Setup logs; or
- a reversible isolation test removes only that component and the same upgrade then succeeds.
-
If no component meets the threshold, classify the case as unisolated 0xC1900101 and use only the minimal-retry branch. Do not invent a blocker.
Resolution steps
Choose the narrowest supported branch. Make one material change per retry whenever practical so a success remains attributable.
Branch A — A third-party security, filter, or tuning application is identified
- Record the product name, version, license information, configuration, and associated driver/service names.
- Download the vendor's current installer and documented removal tool before uninstalling.
- Open Settings > Apps > Installed apps and uninstall the identified product normally.
- Restart Windows. If the vendor documents a cleanup tool for remnants and the Setup logs still show that product's filter, run only that vendor's exact tool.
- Verify the identified service or driver no longer loads. Do not manually delete
.sysfiles. - Keep Microsoft Defender and Windows Firewall enabled unless Microsoft or the exact product vendor documents a specific, temporary requirement. Uninstalling a proven third-party filter is different from broadly disabling Windows security.
- Retry the in-place upgrade from official media while selecting the intended Keep personal files and apps option.
Branch B — A specific device driver or INF is identified
- Download a target-version-compatible driver from the computer OEM first, or the device manufacturer when the OEM directs that path.
- Disconnect nonessential external devices. Keep only power, keyboard, pointing device, and one display.
- Open Device Manager, locate the hardware ID that matches the evidence, and record provider, version, date, and published INF.
- If Roll Back Driver is available and the failure began after a driver update, use it and restart.
- Otherwise uninstall the device package through Installed apps or Device Manager only after the replacement package is local. Start by leaving Attempt to remove the driver for this device unchecked so the previous package remains available for rollback.
- Restart, install the approved replacement, restart again, and confirm the device has no warning icon.
- Retry Setup. Permanently deleting the driver-store package is reserved for a package that is positively identified, reinstalling itself, and safely replaceable.
Branch C — The extend code is 0x3000D and the display driver is supported by the evidence
- Follow Branch B using the exact display adapter and OEM-approved package.
- On switchable-graphics laptops, prefer the laptop OEM's matched integrated/discrete driver set.
- Disconnect docks, USB display adapters, and secondary displays for the retry.
- Do not disable an integrated or discrete adapter unless another known-working display path exists.
- Retry and preserve the new rollback logs if it fails again.
Branch D — No blocker is isolated
- Disconnect nonessential peripherals.
- Run
msconfigand select Services. - Select Hide all Microsoft services, then Disable all. Record the disabled services.
- On Startup, open Task Manager and disable each enabled third-party startup item, recording each one.
- Restart and confirm Windows is in a clean-boot state.
- Retry once with the clean boot and disconnected nonessential peripherals as the only material change. Do not simultaneously update chipset, storage, display, network, and firmware packages; that would make any success unattributable.
- Mount current official Microsoft media from within the running Windows installation and run
setup.exe. - Keep the intended apps/files option. Allow Setup to obtain recommended updates unless a documented failure specifically requires an offline attempt.
- If it fails, preserve the new logs in a new unique attempt directory before restoring normal startup. Compare the fatal timestamp and component to the previous attempt. Only then apply one evidence-supported exact-model driver/package per later attempt. Treat firmware as its own model-specific maintenance procedure with applicability, stable power, and vendor rollback/recovery instructions.
A VMD/RAID/storage-controller change is not part of Branch D. If logs directly identify that path, stop and use a storage-specific procedure with a proven rollback plan.
Expected results and branches
- Upgrade completes after removing one identified blocker: record the exact component, old and replacement versions, Setup code, and successful build. This is the strongest result.
- Upgrade completes only after a broad clean boot: the conflict class is supported, but the individual blocker remains unknown. Re-enable items in groups until the conflicting item is isolated.
- The same code and component return: restore the removed component if needed, preserve the new evidence, and test the next log-supported hypothesis.
- The extend code changes: treat it as a new failure stage. Do not keep applying the old remedy because the base code remains
0xC1900101. - The computer fails to roll back or the system drive becomes unstable: stop retries and move to recovery/storage diagnosis.
- Setup succeeds only after choosing Keep nothing: classify the result as a clean installation, not a validated repair of the in-place-upgrade blocker.
Do not do this
- Do not delete
$Windows.~BT,Windows.old, Panther, or rollback logs before evidence is copied. - Do not use
0xC1900101alone to blame a display, storage, antivirus, or firmware component. - Do not uninstall every driver, delete arbitrary
oem##.infpackages, or remove Microsoft services. - Do not disable Defender, Windows Firewall, Secure Boot, VMD, AHCI, or RAID as a generic experiment.
- Do not flash firmware selected by a similar product name.
- Do not run registry cleaners, tuning utilities, or third-party driver updaters.
- Do not retry repeatedly without preserving each attempt's logs.
- Do not call a destructive Keep nothing installation an upgrade repair.
Rollback
- If a replacement driver worsens normal Windows operation, use Device Manager > Properties > Driver > Roll Back Driver, or reinstall the recorded previous OEM package.
- If a removed third-party product is still required, reinstall its current supported version only after Windows is stable. Restore its documented configuration and confirm its filter versions support the new Windows build.
- Restore normal startup after clean-boot testing from the complete pre-test ledger. Restore each non-Microsoft service and each startup item to its recorded original enabled/disabled state; do not use blanket Enable all, which can activate items that were intentionally disabled before the test. Restart and compare the final state to the saved ledger.
- Reconnect peripherals one at a time, testing between additions.
- If Setup rolled back, Windows normally restores the prior build automatically. Confirm it with
winver; do not assume the rollback was complete merely because the sign-in screen appeared.
Verification
-
Run
winverand record the installed edition, version, and OS build. -
Open Settings > System > Activation and confirm the prior activation state remains valid.
-
Open Device Manager and confirm no new unknown or disabled device exists.
-
Restart twice and perform one full shutdown/start cycle.
-
Test the device or security function affected by the change.
-
Confirm Windows Update history shows the target feature update installed successfully.
-
Reopen an elevated Command Prompt and set
EVIDto the exact unique attempt path recorded in section 6; environment variables do not survive the upgrade restarts. Then export a new driver inventory and compare the changed package:driverquery /v /fo csv > "%EVID%\driverquery-after.csv" pnputil /enum-drivers /files > "%EVID%\pnputil-drivers-after.txt" -
Retain the before/after evidence until the new build has completed ordinary use, restart, shutdown, sleep/resume, and update checks.
Confidence and stop conditions
Confidence is approximately 80% when the full Setup code is recorded, two pieces of evidence identify the same blocker, that blocker is changed reversibly, and the same in-place upgrade then completes while keeping the intended apps and files. Confidence is materially lower when success follows a broad clean boot or multiple simultaneous changes.
The three underlying records include reporter-confirmed success after removing third-party security software, disabling a third-party antivirus, and changing a storage/VMD path. Only the first two support a general low-risk branch. The VMD result remains a storage-specific case and is deliberately not generalized here.
Stop when logs do not identify a blocker after two controlled attempts, the disk becomes unstable, a firmware or controller-mode change would be required without a proven rollback path, the target upgrade path is unsupported, or rollback no longer restores a working system. Escalate with the SetupDiag result, complete code, phase, operation, logs, device inventory, and list of changes already tested.