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.