What does HRESULT 0x80000015 (RO_E_CHANGE_NOTIFICATION_IN_PROGRESS) mean?

 
Could be also:
ConstantTypeOS
STATUS_INVALID_EA_FLAGNTSTATUSWindows
Previous Next
RO_E_EXCLUSIVE_WRITE RO_E_ERROR_STRING_NOT_FOUND

RO_E_CHANGE_NOTIFICATION_IN_PROGRESS

Operation is prohibited during change notification

RO_E_CHANGE_NOTIFICATION_IN_PROGRESS is HRESULT 2147483669 (0x80000015) from winerror.h. AllStat describes it as “this condition.” In the Windows Runtime metadata, object lifetime, asynchronous operation, activation, and apartment model, the code identifies a specific failure boundary and should not be replaced by a generic COM exception.

A generic “operation failed” message is insufficient for it because the recovery decision depends on the exact lifecycle, security, marshaling, or state condition.

Where it is encountered

  • C++/WinRT, WRL,.NET projections, or native WinRT ABI calls. Record the interface, method, component version, thread, apartment, process, and correlation ID.
  • Runtime-class activation, WinMD reflection, asynchronous objects, observable state, or view lifecycle.
  • Cross-thread and cross-apartment handoff between UI, ASTA, STA, MTA, broker, and background work.

The immediate focus for it is a reentrant mutation or query that the object forbids while it is notifying observers about an earlier change. Keep this result attached to that operation; the same numeric severity outside the owning API does not supply enough context.

Decisive interpretation boundary

Before choosing recovery, verify that the active notification, callback stack, and deferred operation are correlated so the caller can execute after notification unwinds. That boundary prevents it from being misclassified as corruption, network failure, or a reason for an unsafe automatic retry.

Also confirm that all observed objects, tokens, buffers, proxies, metadata files, or ACLs belong to the current operation generation and were not retained from an earlier attempt.

Correct handling and recovery

Queue the work for a later dispatcher turn or post-notification phase. Keep notification handlers short and avoid recursively mutating the same object.

An unchanged retry loop for it can duplicate effects, deepen reentrancy, or hide an invalid lifetime transition.

Lifetime, retry, and cleanup rules

After it, determine whether the current object, interface pointer, call context, token, stream, metadata reader, asynchronous operation, or access-control instance remains valid. Release only resources owned by the failing attempt, cancel callbacks through their documented mechanism, and avoid double close, double commit, repeated activation, or replay of a non-idempotent remote method.

The retry policy for it should state the trigger, maximum attempts, cancellation owner, and reconciliation step for effects that may have completed elsewhere.

Practical scenario

A collection-changed handler immediately edits the same observable collection. The application posts the edit to the dispatcher and applies it after the current notification.

A regression test should reproduce it, assert the raw HRESULT and all relevant outputs, then correct only the decisive condition and verify the intended success or neighboring failure result.

Difference from nearby HRESULTs

It is a reentrancy guard; RO_E_EXCLUSIVE_WRITE is a writer-ownership conflict that may occur outside callbacks.

Merging it with the neighboring HRESULT would choose the wrong retry, recreation, authorization, or cleanup path.

Developer and administrator guidance

Dashboards should classify it by its actual cause category—lifetime, timing, apartment, marshaling, identity, authorization, format, buffer, or storage—rather than grouping every COM failure under one counter.

Change the smallest component, identity, ACL, package, or threading boundary that the evidence identifies, then reproduce the same operation. Define who owns retry, cancellation, cleanup, policy changes, package repair, and user-facing messaging for it.

References


Looking for a different code? Search another status or error code.