What does HRESULT 0x80004035 (CO_E_PREMATURE_STUB_RUNDOWN) mean?

 
Previous Next
CO_E_UNREVOKED_REGISTRATION_ON_APARTMENT_SHUTDOWN E_ADS_BAD_PATHNAME

CO_E_PREMATURE_STUB_RUNDOWN

COM stub was rundown while external clients remained

CO_E_PREMATURE_STUB_RUNDOWN is HRESULT 2147500085 (0x80004035) from winerror.h. AllStat describes it as “The object has been rundown by the stub manager while there are external clients.” The value must be interpreted at marshaled object lifetime managed by a stub manager across apartment or process boundaries, because the same high-level symptom can come from a different contract boundary and require different cleanup.

The decisive interpretation for CO_E_PREMATURE_STUB_RUNDOWN is that the server-side stub was released or disconnected even though external clients still held references. For reliable triage of CO_E_PREMATURE_STUB_RUNDOWN, store the native HRESULT and symbolic identity before generic error handling rewrites either one.

Where the result appears

  • CO_E_PREMATURE_STUB_RUNDOWN may surface in marshaled object lifetime managed by a stub manager across apartment or process boundaries.
  • The first boundary to preserve for CO_E_PREMATURE_STUB_RUNDOWN is the exact activation, initialization, call-control, or lifetime step that returned it.
  • For CO_E_PREMATURE_STUB_RUNDOWN, record whether the failure occurred before an object identity existed, while a method was running, or during shutdown; those phases imply different ownership and retry rules.

The root-cause boundary for CO_E_PREMATURE_STUB_RUNDOWN is the component that returned it, not the application screen on which the result was eventually displayed.

Typical causes and interpretation boundary

Common cause categories for CO_E_PREMATURE_STUB_RUNDOWN are: the server calls CoDisconnectObject too early; lifetime bookkeeping is corrupted; shutdown races with clients; custom marshaling violates reference rules. Investigate CO_E_PREMATURE_STUB_RUNDOWN through falsifiable cause hypotheses and keep the first lower-level failure that explains the observed HRESULT.

The check that separates CO_E_PREMATURE_STUB_RUNDOWN from nearby HRESULTs is: the server-side stub was released or disconnected even though external clients still held references. Use the decisive condition for CO_E_PREMATURE_STUB_RUNDOWN as a test assertion; if it cannot be asserted, diagnosis is not complete.

Evidence and telemetry

  • Record CO_E_PREMATURE_STUB_RUNDOWN together with the CLSID, IID, method or control operation, server type, process architecture, and component build.
  • Capture CO_E_PREMATURE_STUB_RUNDOWN evidence: object identity and IPID; external reference count; disconnect and shutdown events; proxy releases; server process lifetime.
  • Preserve the apartment model, thread ID, package or service identity, activation flags, UTC time, and correlation ID associated with CO_E_PREMATURE_STUB_RUNDOWN.
  • For CO_E_PREMATURE_STUB_RUNDOWN, retain the earliest lower-level Win32, RPC, MSI, SxS, CLR, loader, or security event instead of logging only the final HRESULT.
  • After CO_E_PREMATURE_STUB_RUNDOWN, mark every returned interface pointer, handle, cookie, or output parameter as valid only when the owning API explicitly says so.

Logs for CO_E_PREMATURE_STUB_RUNDOWN should expose enough structure to reproduce the failure without becoming a secondary store of sensitive input data.

Diagnostic sequence

  • Capture the raw value 0x80004035 and symbolic name CO_E_PREMATURE_STUB_RUNDOWN before a wrapper translates it to a generic exception.
  • Identify the exact COM entry point and lifecycle phase for CO_E_PREMATURE_STUB_RUNDOWN: initialization, activation, QueryInterface, method execution, cancellation, registration, or teardown.
  • Validate the decisive condition for CO_E_PREMATURE_STUB_RUNDOWN: the server-side stub was released or disconnected even though external clients still held references.
  • Test the principal causes separately for CO_E_PREMATURE_STUB_RUNDOWN: the server calls CoDisconnectObject too early; lifetime bookkeeping is corrupted; shutdown races with clients; custom marshaling violates reference rules.
  • Correlate client and server timelines, including process launch, class registration, RPC activity, security negotiation, and cleanup around CO_E_PREMATURE_STUB_RUNDOWN.
  • Change one precondition at a time, reproduce CO_E_PREMATURE_STUB_RUNDOWN, and verify both the HRESULT and the object or server state after the call.

Correct handling and recovery

For CO_E_PREMATURE_STUB_RUNDOWN, the appropriate recovery is to preserve server objects until documented disconnect conditions, serialize shutdown with proxy lifetime, and investigate reference-count or marshaling bugs. Do not loop on CO_E_PREMATURE_STUB_RUNDOWN; retry only under a documented transient condition with bounded delay and post-operation reconciliation.

After observing CO_E_PREMATURE_STUB_RUNDOWN, separate local resource cleanup from server-side reconciliation and perform each only for the failing activity ID.

Practical scenario

A service tears down a session object immediately after its local owner releases it, while a remote client still holds a proxy; lifetime is tied to external references instead.

The acceptance test for CO_E_PREMATURE_STUB_RUNDOWN should prove that the proposed repair changes the predicted contract fact rather than merely hiding the message.

Difference from related HRESULTs

RPC_E_DISCONNECTED is observed by a caller after disconnection; this code diagnoses premature server-side stub rundown.

Preserve the neighboring-result distinction for CO_E_PREMATURE_STUB_RUNDOWN in metrics and incident reports to avoid applying the wrong remediation.

Developer and administrator guidance

Code handling CO_E_PREMATURE_STUB_RUNDOWN should classify it by lifecycle and ownership rather than by the high bit alone. For <code>CO_E_PREMATURE_STUB_RUNDOWN</code>, initialization failures normally require rebuilding the process or thread environment, capability results require a fallback, and uncertain remote outcomes require reconciliation before retry.

Operational dashboards should keep CO_E_PREMATURE_STUB_RUNDOWN distinct from generic COM failures and attach deployment, service, package, runtime, policy, and architecture dimensions. Administrators should avoid broad registry edits, blanket firewall changes, or permission expansion unless the captured evidence for CO_E_PREMATURE_STUB_RUNDOWN identifies that subsystem.

References


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