Virtual Devices (3.1) (vdag31qh.hlp) (Table of Contents; Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
_Allocate_LDT_Selector
                                                     Up Next Previous
────────────────────────────────────────────────────────────────────────────
 
include vmm.inc
 
VMMcall _Allocate_LDT_Selector, <VM, DescDWORD1, DescDWORD2, Count, flags>
 
The service creates a new selector or selectors and adds them to the Local
Descriptor Table (LDT) for the specified virtual machine.
 
Parameter   Description
────────────────────────────────────────────────────────────────────────────
 
VM          Specifies a handle identifying the virtual machine to receive
            the selectors.
 
DescDWORD1  Specifies the high four bytes of the descriptor for the
            selector. This parameter contains the high 16 bits of the base
            address, the high 4 bits of the limit, and the status and type
            bits.
 
DescDWORD2  Specifies the low four bytes of the descriptor for the selector.
            This parameter contains the low 16 bits of the base address and
            limit.
 
Count       Specifies the number of contiguous LDT selectors to allocate if
            the flags parameter does not specify the ALDTSpecSel value.
            Otherwise, this parameter specifies the LDT selector to
            allocate.
 
flags       Specifies the operation flags. This parameter can be the
            following value:
 
            Value        Meaning
            ────────────────────────────────────────────────────────────────
            ALDTSpecSel  Allocates the LDT selector specified by the Count
                         parameter. The service copies the descriptor data
                         to the specified LDT entry and returns the
                         selector. If the LDT selector is already allocated,
                         the service returns an error value instead.
 
                         If this value is not given, the service allocates
                         the number of selectors specified by Count.
 
            All other values are reserved.
 
Return Value
 
If the service is successful, the EAX and EDX registers contain the
following values:
 
Register  Description
────────────────────────────────────────────────────────────────────────────
EAX       Contains the new selector. If Count is greater than 1, EAX
          contains only the first selector. The second selector is EAX+8,
          the third EAX+16, and so on. The high 16 bits of the selector is
          always zero.
 
EDX       Contains the selector for and the size of the local descriptor
          table (LDT). The low 16 bits contains the selector for the LDT,
          and the high 16 bits contains the size of the LDT expressed as the
          number of selectors in the table.
 
The EAX and EDX registers contain zero to indicate an error such as an
invalid descriptor value, the LDT is full, an invalid virtual machine
handle, or selector already allocated.
 
Comments
 
A virtual device can use the selector of the LDT to directly edit the
selectors in the LDT. However, a virtual device should use the
_SetDescriptor service to change an LDT selector rather than edit the LDT.
 
This service sets the RPL of the selector to the DPL of the selector set in
the DescDWORD1 parameter.
 
LDT selectors are only valid when the virtual machine for which they are
created is the current virtual machine. However, a virtual device can use
the _SelectorMapFlat service to examine the region described by a LDT
selector in virtual machines which are not the current virtual machine.
 
Although this service can create multiple selectors, the _Free_LDT_Selector
service cannot free multiple selectors. Multiple selectors must be freed
individually.
 
When this service creates multiple selectors, it gives each selector the
same descriptor values. It does not change the base address for each
selector. It is up to the virtual device to edit the selectors, and assign
appropriate base addresses.
 
Virtual devices should not rely on specific hard-coded LDT selectors, and
therefore, they should avoid using the ALDTSpecSel value.
 
Uses
 
EAX, EDX
 
See Also
 
_Allocate_GDT_Selector, _Free_LDT_Selector