Flamingo Raises $4.5M Seed Round

Skip to content

A feature update gets to 70%, the PC reboots twice, and then Windows says it's restoring your previous version. The screen gives you one code and nothing else, so the easy move is to retry and hope. This guide decodes error 0xC1900101, shows you where Windows wrote down the real cause, and fixes it in the order that wastes the least time.

What 0xC1900101 Means

0xC1900101 is Windows Setup's generic rollback code. It doesn't name a cause. It says the upgrade failed after it started changing the system, so Setup put the old version back.

Microsoft's upgrade error codes reference says that in most cases the cause is a driver compatibility issue. Setup can throw it at any stage except the first one, the downlevel phase, which runs inside your old Windows. So by the time you see it, the PC has already rebooted into the new setup environment at least once.

That's why the same code turns up on a Windows 10 to 11 upgrade, a full feature update from an ISO, and an in-place repair install. It's the same Setup engine underneath. The code you see is the symptom. The second half of the code, when you can find it, is the clue.

Decode the Extend Code First

Setup returns two codes. The result code is 0xC1900101. The extend code comes after the dash, like 0xC1900101 - 0x4000D, and it tells you when Setup died and what it was doing.

Read it in two parts. The first digit is the phase: 2 is the SafeOS phase (the small setup environment), 3 is the first boot into the new Windows, and 4 is the second boot, where your data and settings migrate. The last two digits are the operation: 17 is boot, 18 is sysprep, 0D is data migration, 0C is applying the image.

Extend codeWhen it failedWhat Microsoft points at
0x20004SafeOS, installing the recovery environmentOut-of-date drivers; unused SATA devices; third-party antivirus
0x2000CSafeOS, applying the imageOutdated drivers or disk corruption
0x20017SafeOS, bootingA driver or non-Microsoft disk encryption; sometimes hardware
0x30018First boot, sysprepA device driver stopped responding
0x3000DFirst boot, migrating dataOften the display driver
0x4000DSecond boot, migrating dataDriver configuration; check for a crash dump
0x40017Second boot, bootingA filter driver, like antivirus or encryption

If all you have is 0xC1900101 with no extend code, that's normal from the Settings page and some upgrade tools. The extend code is still in the logs, and SetupDiag will pull it out for you.

Let SetupDiag Read the Logs for You

SetupDiag is Microsoft's free tool that reads Windows Setup logs and matches them against known failure rules. You may not need to download it. According to Microsoft's SetupDiag documentation, Setup runs it automatically when an upgrade fails.

Look for the results in two places after a failed attempt:

  • %WinDir%\Logs\SetupDiag\SetupDiagResults.xml
  • The registry key HKLM\SYSTEM\Setup\SetupDiag\Results

To run it yourself, download the latest version and run it from an elevated prompt. With no log path it checks the current machine:

code
SetupDiag.exe /Output:C:\SetupDiag\Results.log

The rule name is the first thing to read. DiskSpaceFailure and DiskSpaceBlockInDownLevel are space. UnknownDriverMigrationFailure and DriverMigrationFailure name a bad driver package. FindRollbackFailure gives the last phase and operation. When SetupDiag reports several failures, Microsoft notes that the last one in the log is usually the fatal one, not the first.

Read the Panther and Rollback Logs

When SetupDiag doesn't match a rule, open the logs yourself. They're hidden folders, so turn on hidden items in File Explorer first. Microsoft's log files guide calls setupact.log the most useful one.

For a 0xC1900101 rollback, start in C:\$Windows.~BT\Sources\Rollback. That folder holds the rollback setupact.log, plus three supplemental files: setupmem.dmp if the PC bug-checked during the upgrade, setupapi\setupapi.dev.log for device install problems (the one to read for 0x30018), and event logs as .evtx files. For failures in the first phase, the log lives in C:\$Windows.~BT\Sources\Panther.

Search from the bottom of the file up. Find the last occurrence of the result code, then scroll up a few lines and read what failed just before it. Two strings are worth searching for directly: "Shell application requested abort" and "Abandoning apply due to error for object". The file or driver named next to them is usually your answer.

If there's a setupmem.dmp, the failure was a crash, and the crash names the driver. Our guide to the blue screen of death walks through reading a dump and finding the module behind it.

This r/WindowsHelp thread is the classic version of the problem: a Windows 10 PC that refuses every attempt to move to Windows 11 with the same code.

Fix It in This Order

Work from cheapest to most disruptive. Each step below comes from Microsoft's resolution procedures for 0xC1900101, reordered so the quick checks come first.

  1. Free up disk space. Microsoft's upgrade guidance asks for 20 GB free on a 64-bit system (per its Windows 10 upgrade resolution procedures, updated February 2026). It's the cheapest thing to rule out.
  2. Unplug everything that isn't the keyboard, mouse and display. Docks, USB drives, card readers, second monitors. Microsoft lists this for 0x2000C and 0x30018, and it costs nothing.
  3. Remove or update the driver the logs named. If SetupDiag or setupapi.dev.log names a driver package, update it from the vendor or remove it before the retry. Our guide on updating drivers safely covers doing it without making things worse.
  4. Uninstall third-party antivirus and disk encryption. Filter drivers from security and encryption products are named in the 0x20017 and 0x40017 entries. Uninstall, don't just disable, then reinstall after the upgrade.
  5. Update the BIOS. Microsoft lists it for 0x20004 and 0x4000D. Check the vendor's release notes for storage or chipset fixes, and follow our BIOS update guide if you haven't done one on this model before.
  6. Do a clean boot and retry. A clean boot starts Windows with a minimal set of drivers and startup programs. Microsoft names it as the general fix for driver-conflict rollbacks.
  7. Repair the servicing stack, then use fresh media. If SetupDiag reports a servicing or package failure, such as OptionalComponentInitCBSSessionFailed, run DISM RestoreHealth first. Then retry from a freshly downloaded ISO, and accept "Download and install updates" when Setup offers it.

Kapil Arya, a Microsoft MVP, walks through fixing the error on a Windows 11 upgrade in this video.

When the Answer Is to Wait

Sometimes the right move is not to fix anything. Microsoft puts a safeguard hold on devices with a known compatibility problem, such as a specific driver or app, and holds back the feature update until a fix ships. SetupDiag calls this GatedCompatBlock and describes it as a temporary block.

If a device keeps hitting 0xC1900101 after you forced the update past a hold, stop forcing it. Check KB5006965 for how to see which hold applies, and the Windows release health page for the version you're installing.

Rollbacks can fail in odd ways too. This r/windowsinsiders thread shows the same code turning up while a device tried to roll back an update, not install one.

Finding Rollbacks Across a Fleet

One failed PC is a ticket. Twenty failed PCs after a feature update push is a pattern, and the first question is whether they share a driver or a hardware model.

Because Setup writes SetupDiag results to the same path on every machine, you can collect them with one script:

powershell
$f = "$env:windir\Logs\SetupDiag\SetupDiagResults.xml"
if (Test-Path $f) {
  [xml]$r = Get-Content $f
  [pscustomobject]@{
    Computer = $env:COMPUTERNAME
    Rule     = $r.SetupDiag.ProfileName
    Target   = $r.SetupDiag.SystemInfo.TargetOSBuildString
    Details  = ($r.SetupDiag.FailureDetails -join ' ')
  }
}

Group the output by rule and model. When one rule and one model make up the bulk of the failures, fix that driver once and redeploy, instead of chasing every PC. In OpenFrame, you can run that script across a client's devices and collect the output in one place.

Keep the failed devices off the update ring while you work. If you need to hold feature updates on a group of machines, our guide to pausing Windows Update covers deferring them without switching off security patches.

The Short Version

0xC1900101 means Setup rolled back, and the extend code tells you when. Read SetupDiag's results first, then the Rollback folder's setupact.log from the bottom up. Fix it from the cheap end: space, peripherals, the named driver, then security and encryption filter drivers.

If the rollback left a crash dump, read our guide to the blue screen of death next to find the driver behind it.

Dmytro Koval

Dmytro Koval

Head of Product Engineering

Hi! My name is Dmytro, but everyone calls me Dima. I’m a Software Developer and together with the development team, I help bring Flamingo to life — putting it on its feet from a technical perspective. Originally from Lviv, Ukraine 🇺🇦, but currently based in Spain, where I’ve been enjoying the blend of great weather, culture, and nature. I’m passionate about the mountains and love traveling — exploring new places and cultures really inspires me. These experiences constantly recharge me and give me a fresh perspective, both personally and professionally.