LDT_ENTRY
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;
Members
LimitLow
Contains the
low 16 bits of the address of the last byte in the segment.
BaseLow
Contains the
low 16 bits of the base address of the segment.
HighWord
Contains the
high two words of the descriptor. This member may be interpreted as bytes or
collections of bits, depending on the level of detail required.
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. |
Remarks
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.
See Also