Quick answer
0xC0000180 (STATUS_KEY_HAS_CHILDREN) means the driver install tried to create a symbolic link at a registry key that already has subkeys or values. Delete the stale key under HKLM\SYSTEM\CurrentControlSet\Control\Print — or the specific driver key in ...\Control\Class\{4d36e979-e325-11ce-bfc1-08002be10318} — then rerun the install.
What's actually going on
Windows lets you create a registry key and populate it. It does not let you lay a symbolic link on top of a key that already has children. That's the rule behind STATUS_KEY_HAS_CHILDREN — the kernel refuses to replace a populated key with a link because it would orphan everything underneath. When the print spooler or a driver INF tries to register a symbolic link (usually during a reinstall, an in-place upgrade, or a driver update from an older version), and the target key from the previous install is still hanging around with its values intact, you get 0xC0000180 and the install bails.
The culprit here is almost always a dirty uninstall. The user removed the printer from Settings, maybe even ran the vendor's "uninstall" tool, but the driver's registry branch survived. Then they plug the printer back in, Windows tries to link the new driver to the old key, and it chokes. Seen it hundreds of times — HP, Brother, Xerox, doesn't matter. Any brand will do it if the cleanup was sloppy.
Real trigger: you're reinstalling a Ricoh or HP MFP after a Windows feature update (22H2 → 23H2, for example), the old driver is technically "removed" from Devices and Printers, but the spooler still has the package registered. Boom. 0xC0000180 at the end of the driver install.
Fix it — the reliable path
- Stop the spooler. Everything below fails if the service is holding file handles. Open an elevated PowerShell:
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled- Remove the printer objects and driver packages. Get the driver name first:
Get-PrinterDriver | Format-Table Name, PrinterEnvironment -AutoSizeThen nuke the offending one. Replace YOUR_DRIVER_NAME with the exact string from the list:
Remove-PrinterDriver -Name "YOUR_DRIVER_NAME" -RemoveFromDriverStoreIf it refuses, use pnputil directly:
pnputil /enum-drivers
pnputil /delete-driver oemXX.inf /uninstall /force- Clear the stale registry keys. This is where the actual 0xC0000180 lives. Back up first —
reg export HKLM\SYSTEM\CurrentControlSet\Control\Print C:\print-backup.reg. Then look here:
HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3And here, which is the one people miss:
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e979-e325-11ce-bfc1-08002be10318}Inside that Class GUID, each printer driver has a numbered subkey (0000, 0001, 0002…). Open each one, check the DriverDesc value, and delete the whole numbered subkey if it matches the driver you're reinstalling. Delete the whole branch, not just the values — the symbolic link needs a clean slot.
Also check HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers and remove any leftover queue key matching the old printer name.
- Restart the spooler and re-enable it.
Set-Service -Name Spooler -StartupType Automatic
Start-Service -Name Spooler- Reinstall the driver. Use the vendor's latest package — not the one Windows pulls from WU. Those are old more often than not and you'll be right back here.
If that doesn't work
- Print spooler folder cleanup. Stop the spooler and clear
C:\Windows\System32\spool\PRINTERSandC:\Windows\System32\spool\drivers\x64\3. Stale driver files there can trip the same link creation path. - Print Management console. Open
printmanagement.msc, expand Drivers, and remove any driver flagged as orphaned. It's a GUI shortcut for step 2 and sometimes sees packages PowerShell doesn't. - Full driver store purge. If the driver won't budge, boot into Safe Mode and repeat steps 1–4. The spooler can't fight you when it's not loaded.
- In-place upgrade repair. Genuinely last resort.
Setup.exe /Auto Upgrade /DynamicUpdate Disablefrom a matching ISO. It rebuilds the control set without touching your files. Slow, but it clears weird link states nothing else will.
Prevention
Don't rely on Devices and Printers → Remove device. That deletes the queue, not the driver package. Before you swap or upgrade a printer's driver, run Remove-PrinterDriver -RemoveFromDriverStore — or from Print Management, right-click the driver → Remove driver package. And export HKLM\SYSTEM\CurrentControlSet\Control\Print before any driver install you're not 100% sure about. Two minutes of prep versus an hour of registry archaeology. Easy call.