CO_E_IIDREG_INCONSISTENT (0x80004020) fix for COM interface errors
You'll see 0x80004020 when COM registration for an interface is mismatched—usually after a broken update or manual registration. Here's how to fix it.
When this error hits
You're running a legacy app that uses COM components—think acrotray.exe on Adobe Reader, or mfc42u.dll in an old Visual Basic tool. Suddenly it crashes with 0x80004020. The error message says “The registration information for this interface is inconsistent or incomplete.”
I’ve seen this most often after a Windows 10 21H2 update, or when someone manually registered a DLL with regsvr32 from a different version of the same DLL. It also pops up if you copy COM-enabled files between machines without proper registration.
What’s actually happening
COM (Component Object Model) registers interfaces in the registry under HKEY_CLASSES_ROOT\Interface. Each interface has a GUID, a proxy stub, and a threading model. When you see 0x80004020, the registry entry for that interface is there but one of its subkeys is missing or points to a bad DLL.
For example, say interface {00000000-0000-0000-C000-000000000046} (IUnknown) has a ProxyStubClsid32 pointing to ole32.dll—but the DLL is unregistered or corrupt. Or the ThreadingModel value is set to Both when it should be Apartment. The system sees the GUID, tries to load it, and fails.
The real fix is repairing the registry entry for the specific interface. Don’t waste time with system file checker or DISM—those rarely touch COM registry entries. And skip the generic “run sfc /scannow” advice. It works for corruption, not for registration mismatches.
How to fix 0x80004020
Step 1: Identify the interface GUID
Open Event Viewer: Eventvwr.msc > Windows Logs > Application. Look for an error event with source “COM” or “Application Error”. The event details should include the interface GUID. Example:CLSID: {00024500-0000-0000-C000-000000000046}Interface: {00020400-0000-0000-C000-000000000046}
If the event doesn’t show it, use Process Monitor or DebugView from Sysinternals. Filter by Result: NAME NOT FOUND and look for Interface\{GUID} in the path.
Step 2: Check the registry entry
Open regedit.exe (Admin). Navigate to:HKEY_CLASSES_ROOT\Interface\{the GUID from Step 1}
You should see at least these subkeys:
ProxyStubClsidorProxyStubClsid32– points to a CLSID (another GUID).NumMethods– optional but common.TypeLib– optional, but if present must point to a valid type library.
If any subkey is missing, the interface is broken. If ProxyStubClsid32 is present, note its CLSID (e.g., {00020424-0000-0000-C000-000000000046}).
Step 3: Repair the CLSID entry
Now navigate to:HKEY_CLASSES_ROOT\CLSID\{the ProxyStub CLSID}
Inside, you should see an InprocServer32 subkey with a (Default) value pointing to the DLL path (e.g., C:\Windows\System32\ole32.dll) and a ThreadingModel string value (usually Both or Apartment).
If InprocServer32 is missing, create it. Set (Default) to the correct DLL path. For standard OLE interfaces, it’s ole32.dll. For custom ones, find the original DLL from the app’s installer.
If the DLL path is wrong but the file exists, correct it. If the DLL is missing, you’ll need the original app installer. Do NOT copy the DLL from another machine—COM registrations are per-machine.
Step 4: Re-register the DLL
Open an elevated command prompt (Run as Admin). Run:regsvr32 /u C:\path\to\dll.dllregsvr32 C:\path\to\dll.dll
This re-creates the COM entries for that DLL. If regsvr32 fails with a different error, the DLL itself is corrupt or not a proper COM server. In that case, reinstall the app.
Step 5: Test the fix
Launch the app that caused the error. If it was a one-time crash, restart the service (e.g., net stop Spooler && net start Spooler if it’s a printer-related COM).
Still broken? What to check next
If the error persists after the above, three things:
- Permission problems: The app may not have read access to the registry keys. Check permissions on the Interface and CLSID keys (right-click > Permissions). The user account running the app needs Read access.
- 32-bit vs 64-bit mismatch: A 32-bit app calling a 64-bit DLL or vice versa. Use
%windir%\SysWOW64\regsvr32.exeto register 32-bit DLLs. Check theInprocServer32path:System32is 64-bit,SysWOW64is 32-bit. - Antivirus interference: Some AVs (McAfee, Norton) quarantine or block COM DLLs. Temporarily disable AV, re-register, then re-enable.
If none of that works, the app’s installer is incomplete—contact the vendor for a reinstall that includes all COM dependencies. Trust me, I’ve wasted hours on 0x80004020 when the real answer was “install the Visual C++ redistributable.” Check app logs first.
Was this solution helpful?