| Previous | Next |
| ERROR_INVALID_LDT_SIZE | ERROR_INVALID_LDT_DESCRIPTOR |
ERROR_INVALID_LDT_OFFSET
The starting value for the LDT information was not an integral multiple of the selector size.
ERROR_INVALID_LDT_OFFSET is Windows system result 563 (0x00000233). Microsoft defines it as “The starting value for the LDT information was not an integral multiple of the selector size.” The value should be captured immediately at the producing boundary because later diagnostics, cleanup, or retry code can overwrite a thread-local last-error value or collapse a richer native status.
How to classify the result
This result represents an x86 Local Descriptor Table offset alignment failure. The correct interpretation depends on the exact starting byte offset or selector supplied to the descriptor-table update.
The most important boundary for it is whether the operation reached a documented final state.
Where it can appear
- This result can appear in an x86 compatibility subsystem applying a partial LDT update.
- This result can appear in a debugger or emulator restoring descriptor state.
- It can appear in native status conversion after validating a descriptor range.
When it is found only in a log, preserve the logger, event provider, process, thread, and translation path.
Typical causes
- the caller passed a byte offset that is not divisible by the selector size.
- a selector value was shifted or unshifted twice.
- an array index was supplied where a byte offset was required.
- structure packing changed the computed start position.
- the range began in the middle of an existing descriptor.
These causes are starting points for it, not substitutes for evidence.
Evidence to preserve
- Record raw starting offset for it.
- Record derived selector number for it.
- Record entry size and structure packing for it.
- Record range length and ending boundary for it.
- Record architecture, process bitness, and native status for it.
Also retain decimal 563, hexadecimal 0x00000233, UTC time, machine build, component version, and a correlation identifier.
Recovery and retry
The recovery objective for it is to Recalculate the start from a validated selector boundary and submit the smallest correctly aligned range.
An alignment failure is deterministic; backoff does not help. Retry only with a corrected offset and an unchanged intended descriptor set.
Difference from related results
ERROR_INVALID_LDT_SIZE rejects the extent of the update, while it rejects its starting boundary. Both can appear before descriptor contents are examined.
Keep the original constant in telemetry rather than replacing it with a nearby result that seems more familiar.
Practical validation scenario
An emulator restores selector 7 but mistakenly sends offset 7 rather than 7 multiplied by the entry size. The corrected conversion starts at the proper boundary and leaves neighboring descriptors untouched.
A useful test report for it includes the failing call, exact input, state before the call, raw output, expected state, and observed state after recovery.
Telemetry and support fields
- Record
invalid_ldt_offset_operationfor the producing API, callback, wait, driver, packaging phase, or service transition. - Record
invalid_ldt_offset_targetfor the stable session, selector, device, pin, content, resource, service, or validation identity. - Record
invalid_ldt_offset_state_beforeandinvalid_ldt_offset_requested_stateusing explicit units and enum names. - Record
invalid_ldt_offset_raw_status, the original result domain, and any later HRESULT or Win32 conversion. - Record
invalid_ldt_offset_attempt, elapsed time, process and thread IDs, server or device instance, and correlation ID.
Alerting for it should reflect the classification above.
Developer and administrator guidance
Use typed helpers for selector-to-offset conversion and unit-test the first, last, and overflow boundaries. Logs should label every quantity with its unit.
Developers should preserve it at module boundaries and document whether ownership of buffers, handles, mutexes, callbacks, or transition contexts changes on return.
References
- Microsoft: System Error Codes 500–999
- Microsoft Open Specifications: Win32 error values
- Microsoft: LDT_ENTRY
- Microsoft: GetThreadSelectorEntry
Looking for a different code? Search another status or error code.