The LDT_ENTRY structure describes an entry in the descriptor table. This structure is valid only on x86-based systems.
typedef struct _LDT_ENTRY { // ldte 
    WORD LimitLow; 
    WORD BaseLow; 
    union { 
        struct { 
            BYTE BaseMid; 
            BYTE Flags1; 
            BYTE Flags2; 
            BYTE BaseHi; 
        } Bytes; 
        struct { 
            DWORD BaseMid : 8; 
            DWORD Type : 5; 
            DWORD Dpl : 2; 
            DWORD Pres : 1; 
            DWORD LimitHi : 4; 
            DWORD Sys : 1; 
            DWORD Reserved_0 : 1; 
            DWORD Default_Big : 1; 
            DWORD Granularity : 1; 
            DWORD BaseHi : 8; 
        } Bits; 
    } HighWord; 
} LDT_ENTRY, *PLDT_ENTRY; 
 The members of the Bits structure are as follows:
| Member | Contents | 
|---|---|
| BaseMid | Middle bits (16–23) of the base address of the segment. | 
| Type | Bitmask that indicates the type of segment. This member can be one of the following values: | 
| Value | Meaning | 
|---|---|
| 0 | Read-only data segment | 
| 1 | Read-write data segment | 
| 2 | Unused segment | 
| 3 | Read-write expand-down data segment | 
| 4 | Execute-only code segment | 
| 5 | Executable-readable code segment | 
| 6 | Execute-only "conforming" code segment | 
| 7 | Executable-readable "conforming" code segment | 
| Dpl | Privilege level of the descriptor. This member is an integer value in the range 0 (most privileged) through 3 (least privileged). | 
| Pres | Present flag. This member is 1 if the segment is present in physical memory or 0 if it is not. | 
| LimitHi | High bits (16–19) of the address of the last byte in the segment. | 
| Sys | Space that is available to system programmers. This member might be used for marking segments in some system-specific way. | 
| Reserved_0 | Reserved. | 
| Default_Big | Size of segment. If the segment is a data segment, this member contains 1 if the segment is larger than 64 kilobytes (K) or 0 if the segment is smaller than or equal to 64K. | 
| If the segment is a code segment, this member contains 1 if the segment is a code segment and runs with the default (native mode) instruction set. This member contains 0 if the code segment is an 80286 code segment and runs with 16-bit offsets and the 80286-compatible instruction set. | |
| Granularity | Granularity. This member contains 0 if the segment is byte granular, 1 if the segment is page granular. | 
| BaseHi | High bits (24–31) of the base address of the segment. | 
The members of the Bytes structure are as follows:
| Member | Contents | 
|---|---|
| BaseMid | Middle bits (16–23) of the base address of the segment. | 
| Flags1 | Values of the Type, Dpl, and Pres members in the Bits structure. | 
| Flags2 | Values of the LimitHi, Sys, Reserved_0, Default_Big, and Granularity members in the Bits structure. | 
| BaseHi | High bits (24–31) of the base address of the segment. | 
The GetThreadSelectorEntry function fills this structure with information from an entry in the descriptor table. You can use this information to convert a segment-relative address to a linear virtual address.
The base address of a segment is the address of offset 0 in the segment. To calculate this value, combine the BaseLow, BaseMid, and BaseHi members.
The limit of a segment is the address of the last byte that can be addressed in the segment. To calculate this value, combine the LimitLow and LimitHi members.
  Windows NT: Requires version 3.1 or later.
  Windows: Requires Windows 95 or later.
  Windows CE: Unsupported.
  Header: Declared in winnt.h.
Debugging Overview, Debugging Structures, GetThreadSelectorEntry