I know this error is infuriating—you're just trying to run a database or a transaction-heavy app, and Windows throws up some cryptic enlistment nonsense. But the fix is actually straightforward, and you don't need to reinstall Windows or nuke your drives.
The Quick Fix: Restart the Kernel Transaction Manager
The enlistment is a record kept by Windows' Kernel Transaction Manager (KTM). When it goes missing, usually after a crash or a forced reboot, the transaction can't be reopened. The fastest way to clear this is to disable and re-enable the KTM service. This wipes out orphaned enlistments without touching your files.
- Open an elevated Command Prompt (right-click Command Prompt, choose Run as administrator).
- Type the following commands, pressing Enter after each one:
sc config ktm start= disabled
net stop ktm
If the service doesn't stop right away (it can hang), force it:
taskkill /F /IM svchost.exe /FI "SERVICES eq ktm"
Then re-enable it:
sc config ktm start= system
net start ktm
That's it. Restart the application that threw the error, and it should open the transaction fresh.
Why This Works
KTM is a Windows service that tracks transaction enlistments—think of them as bookmarks for pending file operations. When your system crashed mid-transaction, the bookmarks got corrupted or lost. By stopping KTM, you're telling Windows to forget all those stale bookmarks. Starting it again creates a clean slate. This is the same trick that works for the similar STATUS_TRANSACTION_NOT_FOUND (0xC0190001) error, so if you see that one, use the same steps.
One thing to watch: if you have any active distributed transactions (like a SQL Server cluster), stopping KTM might cause those to fail. Do this during a maintenance window if you're on a server.
Less Common Variations
Error Appears After Reboot
If the error shows up every time you boot, it's likely a service or driver is trying to open an enlistment from a previous session. The fix above still works, but you'll need to do it before that service starts. Boot into Safe Mode, run the commands, then reboot normally. That usually clears it for good.
Error on a Specific Drive or Folder
Sometimes the enlistment is tied to a specific volume, like a database file on D:\Data. If you see the error when accessing that path, there's a chance the volume has a pending transaction log. You can clear it with:
fsutil resource setboot /D:\
(Replace D:\ with your drive letter.) This command resets the boot flag on the volume's transaction log. It's safe for NTFS volumes, but don't run it on a drive that's actively used by SQL Server—it could cause a checkpoint failure.
Error in Virtual Machines
If you're running this in a VM, the enlistment might be stuck on the hypervisor side. Restart the VM's integration services (like VMware Tools or Hyper-V Integration Services) before trying the KTM reset. I've seen cases where the VM snapshot caused a stale enlistment, and a full shutdown and start (not a restart) fixed it.
Prevention: Keep Enlistments Clean
The best way to avoid this is to not have orphaned enlistments in the first place. That means:
- Always shut down properly. Holding the power button during a hang is the biggest culprit. If a program freezes, use Task Manager to kill just that process, not the whole system.
- Update your storage drivers. Older or buggy drivers can cause the system to lose track of transactions during I/O. Check for updates from your motherboard or laptop manufacturer, not just Windows Update.
- For SQL Server users: Run regular
CHECKPOINTcommands in maintenance windows. This flushes transaction logs and reduces the chance of an enlistment going stale.
Also, if you're a developer writing code that uses the Windows Transaction Manager (yes, it's still a thing), make sure you're closing transactions in a finally block. Unclosed transactions are like unclosed files—they just sit there until the OS cleans them up, which might not happen before the error.
The KTM reset is your go-to for this error, and it's worked for me in every case I've seen. If you're still stuck after that, check the Windows Event Log for details—look under Application and System for events with source KTM. But honestly, 95% of the time, the restart does it.