Site icon EfmSoft

What does HRESULT 0x80400000 (INPUT_E_OUT_OF_ORDER) mean?

 
Previous Next
SL_REMAPPING_MDOLLAR_OSR_DEVICE_BLOCKED INPUT_E_REENTRANCY

INPUT_E_OUT_OF_ORDER

INPUT_E_OUT_OF_ORDER identifies a failure in pointer sequencing and interaction state. The input pipeline received samples whose timestamps or frame sequence move backward instead of forward. Investigation of this result should preserve the original object generation before cleanup, retry, or fallback creates a secondary result.

Read the HRESULT in context

Pointer delivery is a state machine, not a stream of interchangeable coordinates. Windows associates samples with a pointer identity, frame, device, modality, timestamp domain, and callback phase., sequence failures are therefore diagnosed by reconstructing when the interaction began, which modality owns it, and whether the caller re-entered the same state machine before the previous notification completed.

Inspect the following boundary: chronology must be evaluated after the application has chosen one time base; mixing device timestamps, QPC-derived values, and replay-relative time can create an apparent reversal even when each source is internally ordered.

Capture before changing state

RecordWhy it matters here
Pointer and frame identifiers around the first reversalIn this result diagnostics, recording pointer and frame identifiers around the first reversal ties the HRESULT to the pointer sequencing and interaction state boundary rather than to the final visible failure.
Raw and converted timestamps with their units and clock originComparing raw and converted timestamps with their units and clock origin shows whether this result follows input, object state, or environment.
Source device, pointer type, and replay or injection batch numberPreserving source device, pointer type, and replay or injection batch number provides the evidence needed to test this distinction: iNPUT_E_FRAME and INPUT_E_HISTORY concern inconsistent membership or identity inside frames or history; this result is specifically about chronology.
The API that accepted the previous sample and rejected the next oneRecording the API that accepted the previous sample and rejected the next one separates the pointer sequencing and interaction state boundary from a later wrapper symptom.

Three diagnostic branches

TestInterpretationHold constant
Same environment, reduced inputIf it disappears with a smaller faithful case, complexity within pointer sequencing and interaction state is implicated.Keep pointer and frame identifiers around the first reversal fixed while simplifying source device, pointer type, and replay or injection batch number.
Same input, fresh object generationIf it changes after rebuilding state, examine ownership across the packet producer, frame collector, and interaction consumer.Place raw and converted timestamps with their units and clock origin on the timeline of the last successful transition.
Same operation on a controlled second pathIf it follows one environment, the failure is not explained by source data alone.Compare pointer type, device identity, window, DPI context, and callback phase while preserving the API that accepted the previous sample and rejected the next one.

A minimal test sequence

When it is returned, use one live pointer and one monotonic time source, then add replay, modality changes, or callback-triggered work separately. A test that changes timestamp generation and callback dispatch at the same time cannot identify which contract was violated.

  1. Feed a minimal sequence from one pointer and one device with strictly increasing timestamps.
  2. apply the production timestamp conversion without merging other devices.
  3. When it is returned, add coalesced history in the order returned by the API, then add cross-device merging last.
  4. Verify wraparound and integer-width handling with values near the observed boundary.

Common wrong turns

INPUT_E_FRAME and INPUT_E_HISTORY concern inconsistent membership or identity inside frames or history; it is specifically about chronology. Do not repair the trace by sorting samples after the fact because sorting can place an UP event before its preceding UPDATE or move a sample into the wrong frame.

Regression verification

A correction for it should let the operation at the pointer sequencing and interaction state boundary complete repeatedly under the original supported conditions. Repeat the control that begins with “Feed a minimal sequence from one pointer and one device with strictly increasing timestamps” and confirm that the following lifecycle step also succeeds. Keep the original failing sample and one deliberate negative case so fallback cannot be mistaken for repair.

Technical references

When it is returned, these references define the public API family, object model, or error list used to interpret this status.


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

Exit mobile version