RPC_E_REMOTE_DISABLED 0x8001011C fix for COM calls
You get this when a process tries to make a COM call to an object in another process or machine but the COM runtime blocks it. The fix involves adjusting DCOM permissions or the calling app's security.
You see 0x8001011C (RPC_E_REMOTE_DISABLED) when a process—say, a 32-bit Outlook add-in—tries to call a COM object that lives in a different process or across a network boundary. The COM runtime flat-out says "no." The trigger is almost always a call to CoCreateInstance or CoGetClassObject where the CLSID is registered as a remote server (AppID with RemoteServerName) or the object's threading model doesn't match the caller's apartment.
What's actually happening here is that the COM security layer checks the calling process against a per-machine or per-user policy. If the caller isn't explicitly allowed to make remote calls—either because the CoInitializeSecurity call set RPC_C_AUTHN_LEVEL_NONE or because the DCOM restrictions under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole block it—you get this error. The error code literally means "remote calls disabled for this process." It's not a network problem. It's an ACL problem.
Root Cause
The COM runtime enforces two separate security gates:
- Process-wide security: set by
CoInitializeSecurity. If a process never calls it, COM uses defaults that often allow remote calls. But if it does call it with restrictive flags—likeRPC_C_AUTHN_LEVEL_NONEorEOAC_DISABLE_AAA—remote activation fails. - Machine-wide DCOM restrictions: under
HKLM\Software\Microsoft\Ole\MachineAccessRestrictionandDefaultAccessPermission. Even if the process allows remote calls, the machine can veto them.
The most common real-world case: a third-party Outlook add-in that hosts a 64-bit background worker process. The add-in calls CoCreateInstance in the worker, but the worker process called CoInitializeSecurity with RPC_C_AUTHN_LEVEL_NONE (or never called it, which triggers COM defaults that still deny remote calls for unregistered CLSIDs).
Fix Steps
- Identify the calling and target processes. Use Process Monitor (procmon) or a debugger to see which EXE triggers the error. Look for
CoCreateInstancecalls with CLSID{...}. - Check the CLSID's AppID. Open regedit, go to
HKCR\CLSID\{your-clsid}\AppID. Note the AppID GUID. Then checkHKCR\AppID\{appid-guid}. If you seeRemoteServerName, that's the remote target. If it's missing, the object runs locally—but the error still means remote calls are disabled for the caller. - Fix the calling process security. Open
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\MachineAccessRestriction. Look for a value namedDefault(REG_BINARY). Export it, then edit the ACL to add the calling process's user account (usuallyNETWORK SERVICEorINTERACTIVE) withRemote Accesspermission. Apply withdcomcnfg.exe—or just delete the key if you don't need custom restrictions. Rebooting is overkill; restart the calling process only. - If the calling process is yours: In your code, before any
CoCreateInstance, callCoInitializeSecuritywith at leastRPC_C_AUTHN_LEVEL_CALLandRPC_C_IMP_LEVEL_IMPERSONATE. Here's the correct call pattern:
HRESULT hr = CoInitializeSecurity(
NULL, // pSecDesc
-1, // cAuthSvc (use default)
NULL, // asAuthSvc
NULL, // pReserved1
RPC_C_AUTHN_LEVEL_CALL, // dwAuthnLevel
RPC_C_IMP_LEVEL_IMPERSONATE, // dwImpLevel
NULL, // pAuthList
EOAC_NONE, // dwCapabilities
NULL // pReserved3
);
The reason step 3 works is that MachineAccessRestriction is a global deny list. If it's missing or empty, COM falls back to the default access permissions. Deleting it resets to unrestricted (not recommended for production). Better to add the right user.
If It Still Fails
Check these:
- AppID permissions: Open
Component Services(dcomcnfg), find your COM app, right-click → Properties → Security. UnderLaunch and Activation Permissions, make sureINTERACTIVEandNETWORKhave local and remote launch. - Firewall: If the remote server is on another machine, port 135 (RPC Endpoint Mapper) must be open.
- Windows Firewall rule for COM: Check if
Windows Management Instrumentation (WMI-In)is enabled—this often gets confused with DCOM. - Event Viewer logs: Look under
Windows Logs → SystemforDCOMerrors—they'll often contain the exact SID or account that's denied. - Test with a simple client: Write a small C++ or PowerShell script that calls the same CLSID. If it works but your production app doesn't, the issue is your app's
CoInitializeSecuritycall—go back to step 4.
One last thing: if you're troubleshooting an Outlook add-in, try disabling the add-in, confirm the error stops, then re-enable it. Sometimes the add-in's own security initialization is conflicting with Outlook's default. Run ProcMon filter for Outlook.exe and 0x8001011C to catch the exact call stack.
Was this solution helpful?