Cause #1: Too Many Active Sessions (Hitting the Session Limit)
This is the one I see most often. Windows has a hard cap on how many remote sessions can run at once—usually two for desktop versions, or whatever your Server license allows. When you try to connect and hit that cap, you'll see 0xC0000196 right after credentials are accepted.
A real-world scenario: your coworker left an RDP session open from yesterday, someone else is still connected, and now you're the third person trying to get in. Boom, error.
The quick fix: kick the stale sessions. If you have admin rights on the target machine, open an elevated Command Prompt and run qwinsta to list sessions. You'll see something like:
SESSIONNAME USERNAME ID STATE TYPE
console admin 1 Active
rdp-tcp#2 jsmith 2 Active
rdp-tcp#3 3 Disc
Look for sessions with Disc (disconnected) or sessions you know are abandoned. Kill them with:
logoff <session_ID>
Replace <session_ID> with the number under ID. So for session 3, it's logoff 3. Works on Windows Server 2016/2019/2022 and Windows 10/11 Pro.
If you can't get in at all, reboot the machine remotely (if you have that access). That clears everything, but it's a blunt hammer—use it when you're locked out.
Prevent it: set a group policy to auto-disconnect idle sessions after 15 minutes. Run gpedit.msc, go to Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Session Time Limits. Set "Set time limit for active but idle Remote Desktop Services sessions" to 15 minutes. This keeps sessions from piling up.
Cause #2: Stale RDP Sessions Stuck in Memory
Sometimes the session count looks fine, but Windows still throws the error because a session didn't clean up properly. This happens after a network drop or when a client machine crashes without logging off. The server still holds those ghost sessions.
I've seen this on Windows Server 2019 after a VPN disconnect—the session stays in a weird state and consumes one of your slots.
The fix: use PowerShell to force-remove all disconnected sessions. Run this in an elevated PowerShell window:
query session | Where-Object { $_.State -eq 'Disc' } | ForEach-Object { logoff $_.SessionID }
That logs off every disconnected session. If you want to be more surgical, replace the filter with a specific username:
query session | Where-Object { $_.Username -eq 'jsmith' } | ForEach-Object { logoff $_.SessionID }
Another option: restart the Remote Desktop Services service. This kills all sessions, so only do it when nothing critical is running. From an admin command prompt:
net stop termservice && net start termservice
That's a sledgehammer approach—it'll disconnect everyone, but it clears all ghost sessions and often fixes the error instantly.
Why this happens: Windows doesn't always properly decrement the session counter when a TCP connection dies abruptly. It's a known quirk, especially with flaky VPNs or when users close their laptop lid instead of logging off.
Cause #3: Registry Setting That Limits Sessions
If the above didn't work, there's a sneaky registry key that can artificially limit sessions. Some third-party tools or manual tweaks set a custom cap. You're looking for:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat
There might also be a TSUserEnabled or TSUserSessions key that overrides the default. Honestly, I've only seen this on machines that had some RDP manager software installed, but it's worth checking.
Open regedit.exe, go to that path, and look for any DWORD value named MaxSessionCount. If it exists, delete it or set it to a higher number (like 9999). Then reboot.
Important: editing the registry is risky. Back it up first (right-click the key, Export, save a .reg file). And don't go crazy setting it to a crazy high number on a low-spec machine—you'll just swap one error for a different performance nightmare.
There's also a case where the license grace period expires on Windows Server. If you're running Server 2016 or newer with RDS role, you might hit this error after the 120-day grace period. The fix there is to install proper RDS CALs, but that's a whole other article.
Quick Reference Summary
| Cause | Fix |
|---|---|
| Session limit reached | Log off inactive sessions with logoff <session_ID> or reboot |
| Stale ghost sessions | Run PowerShell script to log off all Disc sessions |
| Registry override | Delete or adjust MaxSessionCount in TSAppCompat |
Start with the first fix—it solves 80% of these errors. If you've tried all three and still get 0xC0000196, then you're likely dealing with a licensing issue on Server, and that needs a different approach entirely.