| Previous | Next |
| CO_E_OBJSRV_RPC_FAILURE | CO_E_SERVER_STOPPING |
MK_E_NO_NORMALIZED
Treat this HRESULT as a marker, not as a request for a generic restart or reinstall. It is returned when the moniker path cannot be transformed into the normalized form required for stable binding, reduction, or comparison.
Meaning in the subsystem
COM activation is a sequence rather than a single operation: registration lookup, SCM or surrogate selection, process startup, class-factory publication, marshaling, and finally the requested interface call. The useful evidence is the evidence from the first stage that fails; a later RPC or cleanup message can otherwise hide the original activation problem.
Do not collapse this result into a nearby status. A resource can exist but still lack a normalized moniker representation; do not treat this solely as file-not-found. Compare lifecycle, identity, caller, and first API.
Minimum useful evidence
| Capture | Why it matters |
|---|---|
| The exact display name and moniker class sequence before parsing | Pins evidence to one attempt. |
| Filesystem/URL case, separators, relative segments, prefixes, and escaped characters | Separates contract failure from environment. |
| Binding context, left moniker, and result of IMoniker:Reduce or GetDisplayName | Creates a stable before/after control. |
| Whether the underlying resource exists under the same canonical identity | Tests whether the first boundary moves. |
Collect the smallest evidence set that identifies the attempt and object. Redact secrets and message contents; preserve hashes, IDs, policy values, versions, and state transitions instead.
Isolate the responsible condition
- Parse and normalize a minimal absolute display name for the same moniker type; use a disposable or backed-up environment when the comparison changes boot, security, device, queue, or encryption state.
- Compare relative and absolute construction while holding the target resource fixed; retain one negative control so that a broad workaround is not mistaken for a root-cause correction.
- Round-trip display name to moniker and back, then compare with IsEqual; keep every other input fixed and record the first event that differs from the failing run.
If the failure disappears after a broad restart, treat that as a clue about lifetime or state, not as proof of repair. Reproduce the original moniker normalization and comparison operation with targeted instrumentation before closing the incident.
Avoid the common misdiagnosis
Read the comparison results in this order for moniker normalization and comparison:
| Observed result | Interpretation |
|---|---|
| The minimal or known-good comparison succeeds | The control works; inspect production-specific state. |
| The control fails at the same first operation | The control also fails; inspect host/provider evidence. |
| A new HRESULT marks another boundary | The failure moved to another boundary; diagnose the new status separately rather than treating it as confirmation that the entire operation is fixed. |
Regression proof
Apply the smallest change that addresses the first rejected condition: Construct the correct moniker type with an absolute, canonical display name and remove ambiguous relative composition. Preserve the pre-change configuration or trace.
Close the incident only when parse, reduce, serialize, and bind the moniker consistently across processes and working directories. Repeat under the original identity and state. A different environment is comparison, not proof.
Technical references
The following documentation is most relevant when checking the code against the actual Windows contract for moniker normalization and comparison:
- Microsoft Open Specifications: HRESULT values.
- Microsoft: COM clients and servers.
- Microsoft: CoGetClassObject.
- Microsoft: COM elevation moniker.
Looking for a different code? Search another status or error code.
