Remote Desktop: "an internal error has occurred" — 0x204, 0x1104, 0x3
A group of RDP failures with an unhelpful shared message. The hex code after it is the part that matters.
What you see
The client shows "An internal error has occurred" and closes. Sometimes it connects and drops immediately, sometimes it never reaches the credentials prompt.
What is actually wrong
0x204 is usually the firewall or the service not listening. 0x1104 and 0x904 are commonly a licensing or protocol negotiation problem. A CredSSP encryption oracle mismatch is its own error and is caused by one end being patched and the other not.
Codes and articles
Fixes (3)
Confirm something is listening and reachable on 3389
It fails instantly. Establish the basics before touching protocol settings.
Check RDP is enabled and the service is up.
Get-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnectionsGet-Service TermService,UmRdpService | Format-Table Name,Status,StartType
Check what port it is on — a previous change or a conflicting application moves it.
Get-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumberGet-NetTCPConnection -State Listen -LocalPort 3389
Check the firewall rules are enabled for the profile the machine is actually on.
Get-NetConnectionProfile | Format-Table Name,NetworkCategoryGet-NetFirewallRule -DisplayGroup 'Remote Desktop' | Format-Table DisplayName,Enabled,Profile
A machine that has flipped to the Public profile after a network change has the rules in place but not applied to it, which produces exactly this error with nothing logged.
Enable it properly if it is off.
Set-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0Enable-NetFirewallRule -DisplayGroup 'Remote Desktop'
Test-NetConnection target -Port 3389 -InformationLevel DetailedResolve the CredSSP encryption oracle mismatch at the right end
The error names CredSSP or an encryption oracle remediation, usually 0x80090326.
Identify which end is unpatched. The correct fix is always to patch the server, not to weaken the client.
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 HotFixID,InstalledOnBring the remote machine up to date. This removes the mismatch permanently and is the only fix that does not reduce security.
If the remote machine genuinely cannot be patched right now and access is needed to do so, the client can be relaxed temporarily.
New-Item -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -Force | Out-NullSet-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -Name AllowEncryptionOracle -Type DWord -Value 2
Value 2 is Vulnerable — it permits a downgraded session that an attacker on the path can exploit. It exists to get you in to patch the far end, and should be reverted the moment you have.
Revert as soon as the server is patched.
Remove-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters' -Name AllowEncryptionOracle
Turn off the protocol features that fail on the far end
It connects, shows black, then drops — usually a graphics or bitmap negotiation problem.
Read the client-side reason from the log.
Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-RDPClient/Operational' -MaxEvents 30 | Format-Table TimeCreated,Id,Message -WrapDisable UDP transport on the client, which is the usual cause of a session that connects and dies on a lossy link.
New-Item 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Client' -Force | Out-NullSet-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Client' -Name fClientDisableUDP -Type DWord -Value 1
RDP starts on TCP and upgrades to UDP for responsiveness. When UDP is partly blocked the upgrade succeeds and then stalls, which looks like a black screen rather than a network fault.
On the target, restart the service outside working hours — it disconnects everyone.
Restart-Service TermService -ForceIf the target is a VM with a GPU-accelerated encoder, disable hardware encoding for RemoteFX in Group Policy under Remote Session Environment.
Where this stops. This write-up was written and checked by hand. It says what each step changes, how to confirm it worked and how to reverse it, and anything destructive is flagged before you reach it. If it does not match what your machine is doing, search the Support Centre for the exact code or message — and when something needs a person, get in touch.