Issue
An in-place Windows 10 or Windows 11 feature update or version upgrade reaches its first boot into the new operating-system image, fails during device/service specialization, and rolls back. Windows then reports 0xC1900101-0x30018, often with FIRST_BOOT and SYSPREP_SPECIALIZE.
The result code indicates the 0xC1900101 rollback family; the 0x30018 extend code identifies the failed phase/operation and makes device-install evidence especially important. A device driver that stops responding to Setup is a documented cause, but the code still does not name the device. This procedure preserves the logs, identifies the exact INF/device/filter when possible, removes or replaces only that blocker, and retries the same in-place operation.
Searchable Windows error codes and exact messages
| Displayed identifier | Windows name or exact message | When it can apply |
|---|---|---|
0xC1900101-0x30018 | The installation failed in the FIRST_BOOT phase with an error during SYSPREP_SPECIALIZE operation | Primary identifier for this procedure. It most often routes investigation to device drivers, services, and low-level software initialized during specialization. |
0xC1900101 | Commonly We couldn't install Windows followed by rollback wording | The base result may be all the user interface shows. SetupDiag or logs must confirm extend code 0x30018 before using this page as the specific diagnosis. |
0x30018 | Extend code found in SetupDiag or Setup logs | Indicates device-install/Sysprep specialization context; inspect setupapi.dev.log. |
| No numeric code | We couldn't complete the updates. Undoing changes / Restoring your previous version of Windows | Confirms rollback, not the driver or service responsible. |
| No numeric code | SetupDiag rule plus Last Phase = First Boot and Last Operation = Sysprep Specialize | Equivalent phase evidence when the combined code was not retained by the UI. |
A bug-check code recorded in setupmem.dmp | Examples can include driver-related stop codes, but the actual code/module varies | Treat the dump's code and named module as separate evidence. Do not invent a common code when none was captured. |
Do not collapse 0xC1900101-0x30018 into 0xC1900101-0x3000D; 0x3000D is FIRST_BOOT/MIGRATE_DATA and has a different primary log path and blocker set.
Applies when
Use this procedure when:
- Windows 10 or Windows 11 restores the previous working build after an attempted in-place upgrade;
- the complete result is
0xC1900101-0x30018, or SetupDiag/logs independently show FIRST_BOOT/SYSPREP_SPECIALIZE and extend code0x30018; - the target Windows version and upgrade path are supported;
- the current system drive is stable; and
- the user intends to keep apps and files rather than perform a clean installation.
It applies whether Setup was started from Windows Update or official Microsoft media, provided the attempted operation was the same supported in-place upgrade.
Does not apply when
Do not use this specific procedure for an unsuffixed 0xC1900101 with no phase evidence, 0x3000D, 0x20017, 0x4000D, a clean-install failure, or a cumulative update that never enters Windows Setup's upgrade phases.
It does not apply when the current Windows installation no longer starts, the system disk is unstable, the target version is unsupported, or compatibility checks show the hardware cannot run the target version.
Do not use it to justify disabling Microsoft Defender, Windows Firewall, Secure Boot, VMD, AHCI, RAID, or all devices. The failed component must be identified or the retry must remain a minimal, reversible clean-boot test.
Information that may remain unknown
The exact Windows build that first exposed the incompatibility and whether the driver stopped responding because of its own defect or an interaction may remain unknown.
The following may not remain unknown before component removal:
- result code and extend code;
- last phase and operation;
- fatal timestamp;
- exact device hardware ID, published INF, driver/service/filter, or application proposed as blocker;
- provider, version, and replacement source;
- how the current component will be restored; and
- whether the retry will preserve apps and files.
When no blocker can be isolated, that uncertainty must remain explicit; it does not authorize random removals.
Requirements
- Administrator access to the rolled-back Windows installation
- Verified backup of important data
- Stable power and enough free space for Setup
- Latest Microsoft SetupDiag or the automatic SetupDiag result
- Preserved
$Windows.~BT\Sources\Rollbackand Panther folders setupapi.dev.log,setupact.log,setuperr.log, event logs, andsetupmem.dmpwhen present- Current driver inventory from PnPUtil and Device Manager
- Exact-model OEM replacement drivers downloaded in advance
- Official Microsoft target media for a controlled in-place retry
- A recorded clean-boot baseline and recovery media
RAID/SCSI/VMD branches remain catalogued but are not first-line. They require direct storage-driver evidence and their own safe transition plan.
Starting position
Do not retry immediately after rollback.
-
Sign in to the restored Windows installation and verify ordinary file access.
-
Open Terminal (Admin) and create a unique evidence structure for this attempt:
for /f %I in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd-HHmmss"') do set "EVID=%SystemDrive%\UpgradeEvidence\FIX063-%I" md "%EVID%" echo %EVID% -
Download the latest Microsoft SetupDiag and save
SetupDiag.exein the displayed%EVID%directory. Record its file version. If it cannot be downloaded, preserve the automatic result and do not use an unofficial copy. -
Copy the rollback and Panther trees before cleanup changes them:
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 a copy failure. Record missing source paths explicitly. Never merge a later attempt into this directory.
-
Capture current state:
msinfo32 /nfo "%EVID%\msinfo32-before.nfo" driverquery /v /fo csv > "%EVID%\driverquery-before.csv" pnputil /? > "%EVID%\pnputil-help.txt" pnputil /enum-drivers /files > "%EVID%\drivers-before.txt" pnputil /enum-devices /drivers > "%EVID%\devices-drivers-before.txt"On a build that lacks either switch, use
pnputil /enum-driversand/orpnputil /enum-devices, then capture the exact INF, driver files, and device instance in Device Manager. Do not treat unsupported syntax as evidence that no driver/device exists. -
Save screenshots of Update history and the complete rollback code.
-
Inventory third-party antivirus, anti-ransomware, tuning, VPN, encryption, disk, virtualization, audio-enhancement, Bluetooth, Wi-Fi, display, and OEM management components. Inventory is not proof.
Confirm the diagnosis
-
Run the latest SetupDiag elevated:
"%EVID%\SetupDiag.exe" /Output:"%EVID%\SetupDiagResults.log" -
Confirm the result or extend code is
0x30018, and record:- matching rule;
- result code;
- last phase;
- last operation;
- failure timestamp; and
- named driver, INF, service, device, or application.
-
If SetupDiag lists multiple failures, start with the last fatal failure, not the first warning.
-
Open
%EVID%\Rollback\setupapi\setupapi.dev.log. Work from the end upward around the failure timestamp. Record each device-install section's:- hardware ID;
- INF path and published name;
- provider and version;
- operation start/end time;
- exit status; and
- lines marked as failures.
-
Do not treat every
!warning as fatal. Correlate the same device and timestamp withsetupact.log,setuperr.log, or SetupDiag. -
Search the rollback Setup logs:
findstr /i /n /c:"0x30018" /c:"0xC1900101" /c:"SYSPREP_SPECIALIZE" /c:"abort" "%EVID%\Rollback\setupact.log" findstr /i /n /c:"0x30018" /c:"error" /c:"fatal" "%EVID%\Rollback\setuperr.log" -
If
setupmem.dmpexists, preserve it. Use SetupDiag offline/dump analysis or a qualified debugger to record the actual stop code and module. A dump-named driver is stronger than a generic code. -
Map an identified
oem##.infto the live device:pnputil /enum-drivers /files pnputil /enum-devices /driversVerify provider, class, version, hardware ID, and device instance. Similar vendor names are insufficient.
-
Check Device Manager for disabled, duplicate, unknown, or Code 10/19/28/31/43 devices, especially Bluetooth, Wi-Fi, display, audio, USB, storage, and chipset devices named in the log. Device Manager codes are supporting evidence, not proof of
0x30018by themselves. -
Check third-party filter products. Give priority only when the product's driver/service is named at the failure timestamp or the first failed upgrade followed its installation/update.
-
Use this minimum threshold before a targeted change:
- the same component appears in SetupDiag and
setupapi.dev.log; or setupapi.dev.logrecords its failed install at the fatal timestamp and another Setup log agrees; or- a rollback dump names its driver and the phase/timestamp agree; or
- removing only that component allows the same upgrade to complete.
- the same component appears in SetupDiag and
-
If no component meets the threshold, classify it as unisolated 0x30018 and use only Branch D.
Resolution steps
Make one evidence-based change per retry when practical.
Branch A — A specific PnP driver/INF is identified
- Download a target-compatible replacement from the computer OEM or the device manufacturer path approved by the OEM.
- Record the current driver version, provider, hardware ID, and
oem##.inf. - Disconnect the nonessential device if external.
- If the failure began after a driver update and Roll Back Driver is available, use it and restart.
- Otherwise uninstall the device from Device Manager. Preserve the current package on the first attempt by leaving the driver-removal checkbox clear.
- Restart and install the compatible replacement.
- Confirm Device Manager shows the intended version and no problem code.
- Retry the in-place upgrade with only essential peripherals connected.
Branch B — A third-party antivirus, anti-ransomware, tuning, or low-level filter is identified
- Record product version, license, configuration, services, and driver names.
- Download the vendor's current installer and documented removal tool.
- Uninstall the identified product through Settings > Apps > Installed apps.
- Restart. Use the vendor cleanup tool only if documented remnants match the Setup evidence.
- Confirm the identified service/filter is no longer loaded.
- Do not disable Microsoft Defender or Windows Firewall. They are not substitutes for removing a proven third-party filter.
- Retry Setup. Reinstall a target-compatible version only after the upgrade is stable.
Branch C — Bluetooth, Wi-Fi, display, audio, or another nonessential device is identified
- Download its exact replacement package first.
- Disable or uninstall only the named device/driver, not the whole device class.
- For Bluetooth/Wi-Fi, disconnect network access after media and drivers are local.
- For external devices, physically disconnect them.
- For display, retain a known-working integrated/basic display path.
- Restart and confirm ordinary Windows remains stable.
- Retry using official local media, then reinstall/re-enable the device after the target build starts.
Branch D — No individual blocker is isolated
- Disconnect all nonessential peripherals, leaving power, keyboard, pointing device, and one display.
- Open
msconfig. - On Services, select Hide all Microsoft services, then Disable all. Record each disabled service.
- On Startup, open Task Manager and disable recorded third-party startup items.
- Restart and confirm the system is in a clean-boot state.
- Retry once with clean boot and disconnected nonessential peripherals as the only material change. Do not update several drivers or firmware in this first comparison.
- Mount current official Microsoft media from within the running Windows installation and run
setup.exe. - Select the intended Keep personal files and apps option.
- Allow recommended Setup updates unless the evidence documents a Dynamic Update-specific conflict.
- If the same failure returns, preserve the new logs in a new unique attempt directory before restoring normal startup. Compare the exact failing device/INF and timestamp. Only then apply one evidence-supported exact-model package per later attempt. Firmware is a separate model-specific procedure requiring confirmed applicability, stable power, and documented vendor recovery/rollback; do not combine it with a driver change.
A storage-controller/VMD change is excluded from Branch D. If setupapi.dev.log directly names that path, stop and use a storage-specific procedure that prepares Windows for the transition and provides a tested firmware rollback.
Expected results and branches
- Upgrade completes after one driver replacement/removal: record the old/new INF, version, hardware ID, and target build. This is a strong validated resolution.
- Upgrade completes after removal of one filter product: record its driver/service and whether a compatible version can be reinstalled.
- Upgrade completes only in broad clean boot: the conflict class is supported, but the component remains unknown. Re-enable non-Microsoft items in groups to isolate it.
- The same
0x30018returns with the same component: the replacement did not resolve the blocker; restore it if needed and escalate with logs. - The code changes to
0x3000D,0x20017, or another suffix: route to the new phase. Do not keep calling it the same failure. - Setup succeeds only after Keep nothing: classify as a clean installation, not a repaired in-place upgrade.
- Normal Windows becomes unstable after driver removal: roll back immediately before another Setup attempt.
Do not do this
- Do not disable Defender, Windows Firewall, or every device as a generic fix.
- Do not select Keep nothing unless a destructive installation is knowingly accepted.
- Do not delete random
oem##.infpackages or.sysfiles. - Do not remove all network, storage, chipset, USB, or display drivers at once.
- Do not change AHCI/RAID/VMD mode based only on
0x30018. - Do not flash firmware without exact-model applicability and rollback instructions.
- Do not use registry cleaners, tuning tools, or third-party driver scanners.
- Do not delete rollback logs before the next comparison is complete.
- Do not call antivirus/firewall/Bluetooth disablement causal when all were changed simultaneously.
Rollback
- For a driver change, use Device Manager > Roll Back Driver or reinstall the recorded prior OEM package.
- Re-enable a disabled device after Windows is stable; confirm its prior version and function.
- Reinstall a required third-party product from its current supported installer and restore its documented configuration.
- Restore normal startup from the complete pre-test ledger. Restore each non-Microsoft service and startup item to its recorded original enabled/disabled state; do not use a blanket enable action. Restart and compare the final state with the ledger.
- Reconnect external devices one at a time.
- If Setup fails, let automatic rollback finish. Confirm the restored build with
winverand confirm files/apps before making another change.
Verification
-
Run
winverand record the target edition, version, and OS build. -
Confirm Settings > System > Activation retains its expected state.
-
Confirm Device Manager contains no new unknown device, unintended disabled adapter, or problem code.
-
Verify the corrected/reinstalled device functions.
-
Perform two restarts, one full shutdown/start, and one sleep/resume cycle.
-
Check Update history for successful completion.
-
Reopen an elevated Command Prompt and reset
EVIDto the exact unique attempt path recorded in section 6, because environment variables do not survive upgrade restarts. Then export the after-state:driverquery /v /fo csv > "%EVID%\driverquery-after.csv" pnputil /enum-drivers /files > "%EVID%\drivers-after.txt" pnputil /enum-devices /drivers > "%EVID%\devices-drivers-after.txt" -
Review Reliability Monitor/Event Viewer for new driver crashes, device-install failures, or unexpected restarts.
-
Retain the preserved rollback evidence until the upgraded system remains stable through ordinary use and its first subsequent update cycle.
Confidence and stop conditions
Confidence is approximately 80% when 0x30018 and FIRST_BOOT/SYSPREP_SPECIALIZE are confirmed, two evidence paths identify the same device/driver/filter, only that blocker is changed, and the same in-place upgrade then completes while keeping apps and files. Confidence is lower after a broad clean boot or simultaneous changes.
The three underlying records report success after combinations involving antivirus, firewall, Bluetooth, official media, and tuning/security utilities. Because several actions were simultaneous, those records do not prove that disabling Windows security was necessary. This writeup retains the well-supported branches—remove a proven third-party filter, isolate a named device/driver, use a clean boot and official media—and rejects broad Defender/firewall disablement as an evidence-free default.
Stop if the target path is unsupported, the disk becomes unstable, Setup evidence does not confirm 0x30018, no blocker is identified after two controlled retries, removal would affect the only storage or display path without recovery, or rollback no longer returns a working system. Escalate with SetupDiag output, setupapi.dev.log, Setup logs, exact hardware IDs/INFs, dump evidence, and the one-change-per-attempt ledger.