| Previous | Next |
| ERROR_FLOAT_MULTIPLE_TRAPS | ERROR_DRIVER_FAILED_SLEEP |
ERROR_NOINTERFACE
What this result means
ERROR_NOINTERFACE is a Windows system result. This result usually indicates an interface negotiation failure, commonly analogous to COM E_NOINTERFACE. The object exists, but it does not implement the requested contract for the supplied interface identifier or version.
Likely causes
- the caller requested the wrong IID or interface version
- the component is older than the caller expects
- aggregation, marshaling, or proxy registration exposes a different interface set
- a wrapper forwarded the query to the wrong underlying object
How to diagnose it
Record the interface identifier, component class or endpoint, module version, architecture, activation context, and result of querying known base interfaces. Check registration and proxy/stub deployment where applicable.
Correct handling
Use feature detection and gracefully fall back to a supported interface. Do not cast pointers or assume layout compatibility. Update the component when the newer contract is required.
Where this code is usually encountered
- COM QueryInterface is asked for an IID the object does not implement.
- Client and server versions disagree about an optional interface.
- A proxy/stub, registration, or apartment boundary exposes a different object than expected.
Evidence worth collecting
- the requested IID and object class/CLSID
- client and server binary versions and bitness
- activation path, apartment model, and marshaling route
- registration and proxy/stub configuration for custom interfaces
Practical diagnostic sequence
- Log the IID symbolically and identify which object actually received QueryInterface.
- Verify that the interface is documented for that class and product version.
- Test in-process and out-of-process activation separately to isolate marshaling or registration.
- Use a documented fallback interface when the requested capability is optional.
Guidance for developers
QueryInterface failure for an optional interface is normal capability negotiation. Check HRESULT precisely, release every acquired interface, and avoid unsafe casts that assume implementation.
Guidance for administrators
Repair registration only when the interface should be present and deployment is incomplete. Installing arbitrary DLL registrations can create larger COM version conflicts.
How to interpret it correctly
E_NOINTERFACE concerns object capability. CLASS_E_CLASSNOTAVAILABLE and REGDB_E_CLASSNOTREG concern locating or activating the class itself.
Example failure pattern
A version-tolerant COM client may request a newer IID, receive E_NOINTERFACE, and continue through an older supported interface. A brittle client instead treats capability negotiation as installation corruption. Logging both IID and CLSID makes the difference obvious.
Retry and recovery policy
Fallback is appropriate only when the interface is documented as optional. Repeated QueryInterface calls cannot add capability; activation or registration repair is relevant only when deployment guarantees that the interface should exist.
Suggested telemetry
For ERROR_NOINTERFACE, record the operation name, component version, process and thread identity, the original numeric result, the immediately preceding state transition, and a correlation identifier. Keep the ERROR_NOINTERFACE event separate from later fallback failures so its first actionable cause remains searchable across machines.
References
Looking for a different code? Search another status or error code.
