1. Antivirus or Security Software Blocking Async RPC Calls
In my experience, nine times out of ten, this error shows up because some security suite is intercepting RPC calls and messing with the async handle. I had a client last month whose entire print spooler kept crashing with 0XC0020063 on their Windows Server 2019 box. Turned out their endpoint protection was scanning every RPC packet and corrupting the handle.
The fix: Temporarily disable your antivirus or add your application to the exclusion list. If you're running a third-party AV (Symantec, McAfee, Trend Micro, etc.), also try turning off the real-time scanning or the firewall module for RPC traffic.
- Press
Win + R, typeservices.msc, and press Enter. - Locate the service for your AV (e.g., "Symantec Endpoint Protection").
- Right-click and choose Stop.
- Try your operation again. If the error disappears, you've found the culprit.
If you can't stop the service permanently, create a firewall rule to allow your app's .exe through. Go to Windows Defender Firewall with Advanced Security and add an inbound and outbound rule for that executable. Also check if your AV has an option to "trust" certain applications or paths.
Why this happens: Antivirus hooks into system calls to inspect data. Async RPC calls are especially fragile because the handle is used asynchronously — if the AV delays or modifies the call, the handle becomes invalid. I've seen this with everything from SQL Server to custom in-house apps calling WMI.
2. Corrupted or Stopped RPC Services
Another common cause is the RPC services themselves being in a bad state. Specifically, the Remote Procedure Call (RPC) service and the RPC Endpoint Mapper need to be running and set to Automatic. If either is disabled or stuck, you'll get random RPC errors, including this one.
The fix: Restart both services and make sure their startup types are correct. Here's how:
- Open
services.mscagain. - Find
Remote Procedure Call (RPC). Its status should beRunning. If not, right-click and Start. - Double-click it, set Startup type to
Automatic, and click Apply. - Do the same for
RPC Endpoint Mapper(also calledRemote Procedure Call (RPC) Locatoron older systems).
But just restarting isn't always enough. I've seen cases where the RPC Endpoint Mapper's registration gets corrupted after a Windows Update. In that situation, the real fix is to re-register the RPC runtime:
regsvr32 rpcrt4.dll
regsvr32 rpcns4.dll
Run those in an elevated command prompt, then restart the RPC services. Also verify that the DCOM Server Process Launcher and Background Tasks Infrastructure Service are running, since they depend on RPC.
Why this happens: Windows uses RPC for almost everything — file sharing, printing, remote management, even the task scheduler. When one of those services hiccups, async calls to other components get a stale handle. It's like dialing a phone number and getting a busy signal even though the line isn't in use.
3. Application or Script Using Outdated RPC Handle
Sometimes the error isn't from Windows itself—it's from a specific application that's caching an RPC handle and reusing it after the server has restarted or the connection timed out. This is common with custom scripts, database clients, or management tools that hold an async RPC handle open.
The fix: If the error appears in a specific program, restart that program or the service it's connecting to. For example, if you're getting 0XC0020063 when using a PowerShell script that calls Invoke-Command, try closing the PowerShell session and opening a new one.
For longer-running apps, check if there's an update or a configuration setting that controls RPC timeouts. Sometimes you can tweak the RPC_SERVER_TIMEOUT registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\ServerTimeout
Set it to a higher value (in seconds) to prevent premature handle invalidation. I've had to do this for a remote backup tool that kept dropping connections during large transfers.
Why this happens: Async RPC calls are designed for non-blocking operations—you start a call, get a handle, and then later check the result. If the underlying connection resets, that handle becomes invalid. The app should handle that gracefully, but many don't. If you're writing the code, make sure to check the return value of RpcAsyncInitializeHandle and handle RPC_S_INVALID_ASYNC_HANDLE (which is 0xC0020063) by recreating the handle.
For non-coders, the practical fix is to update the application, or if it's a custom script, add error handling that retries the call with a fresh handle.
Quick Reference Table
| Cause | Symptom | Fix |
|---|---|---|
| Antivirus interference | Error appears randomly, often after AV update or during scans | Disable AV temporarily, add app exclusion, or configure firewall rules |
| RPC services stopped/corrupted | Error persists across different apps, possibly with other RPC errors | Restart RPC services, set to Automatic, re-register DLLs |
| App using stale handle | Error appears after system restart or long idle period, only in one app | Restart app, update it, or adjust RPC timeout settings |
That's the short list. Start with the antivirus check—it's quick and you'll likely save yourself an afternoon. If that doesn't do it, move down the list. And if you're still stuck, give me a call—I've got a few more tricks up my sleeve, but those involve a debugger and a lot of coffee.