VOID LDRSRV_Copy_Extended_Memory()
Allocates a block of extended memory in the specified data group (init, locked, or pageable) to the size requested and initializes the block with the given data.
AX
0006h, the function number for this service.
CX
Number of bytes to allocate.
DX
Type of data being allocated. It can be one of the following values:
Value | Meaning |
LDRSRV_COPY_INIT | INIT data |
LDRSRV_COPY_LOCKED | LOCKED data |
LDRSRV_COPY_PAGEABLE | PAGEABLE data |
DS:SI
Address of data to be copied.
This service is provided by the real-mode VxD loader. It provides a convenient way for a VxD to pass more than a single DWORD of data to their protected-mode portions. The VxD can simply create a block of extended memory and pass its linear address through the VxD reference DWORD (that is, the value of EDX on exit from real-mode initialization).
Actual sizes of blocks are always rounded up to the nearest DWORD. Multiple blocks allocated by a single VxD are guaranteed to be contiguous in linear address space, but not necessarily in physical address space.
PAGEABLE data may actually be allocated as LOCKED data, at the loader's discretion. Initialization (INIT) data is always locked, and is discarded after all VxD initialization phases are completed.