| Previous | Next |
| STATUS_INVALID_LDT_OFFSET | STATUS_INVALID_IMAGE_NE_FORMAT |
STATUS_INVALID_LDT_DESCRIPTOR
The selector boundary is valid, but the descriptor fields are not
STATUS_INVALID_LDT_DESCRIPTOR concerns the descriptor supplied for an LDT update. An LDT_ENTRY encodes the segment limit, base address components, descriptor privilege level, present bit, type bits, granularity, and default operand-size information. These fields describe a segment; they are not an arbitrary eight-byte payload.
This status should be separated from LDT offset and size failures. A request can begin on a valid selector boundary and contain the correct number of entries while one descriptor encodes an invalid or unsupported combination. Microsoft selector APIs expose the same descriptor fields, which makes a field-by-field comparison with a known working entry more useful than a raw hexadecimal diff alone.
Capture the complete descriptor and decode its base, limit, type, privilege, present, granularity, and default-size fields. Also record the compatibility subsystem and target selector. Check whether custom emulator/debugger code rebuilt the descriptor from a packed private structure or copied a descriptor across architectures. Do not clear bits until the status disappears: changing privilege or segment type can alter access semantics. Reconstruct the entry from the documented descriptor model and the intended 16-bit segment properties.
What to inspect
- Decode every
LDT_ENTRYfield instead of logging only the raw 64-bit value. - Compare the failing entry with the segment properties the VDM or compatibility layer intended to represent.
- Avoid trial-and-error bit clearing; descriptor privilege, type, and present bits have execution semantics.
References
- Microsoft: LDT_ENTRY
- Microsoft: GetThreadSelectorEntry
- Microsoft: Wow64GetThreadSelectorEntry
- Microsoft: NTVDM and 16-bit app support
- Microsoft Open Specifications: NTSTATUS values
Looking for a different code? Search another status or error code.
