| 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.
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.
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
| Record | Why it matters here |
|---|---|
| Pointer and frame identifiers around the first reversal | 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 origin | Comparing 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 number | Preserving 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 one | Recording 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
| Test | Interpretation | Hold constant |
|---|---|---|
| Same environment, reduced input | If 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 instance | If 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 path | If 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
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.
- Feed a minimal sequence from one pointer and one device with strictly increasing timestamps.
- Apply the production timestamp conversion without merging other devices.
- Add coalesced history in the order returned by the API, then add cross-device merging last.
- 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 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.
Technical references
Looking for a different code? Search another status or error code.