Virtual Devices (3.1) (vdag31qh.hlp) (Table of Contents; Topic list)
_HeapReAllocate
                                                     Up Next Previous
────────────────────────────────────────────────────────────────────────────
 
include vmm.inc
 
VMMcall _HeapReAllocate, <hAddress, nbytes, flags>
 
or      eax, eax        ; zero if error
jz      error
mov     [Address], eax  ; address of reallocated block
 
The _HeapReAllocate service reallocates or reinitializes an existing memory
block.
 
Parameter  Description
────────────────────────────────────────────────────────────────────────────
 
hAddress   Specifies the address of the memory block. This address must have
           been previously returned from the _HeapAllocate or
           _HeapReAllocate service.
 
nbytes     Specifies the new size in bytes of the reallocated block. This
           parameter must not be zero.
 
flags      Specifies the allocation flags. This parameter can be a
           combination of the following values:
 
           Value           Meaning
           ─────────────────────────────────────────────────────────────────
           HeapZeroInit    Fills any new bytes in the memory block with
                           zeros. All existing bytes remain unchanged.
 
           HeapZeroReInit  Fills all bytes, new and existing, with zeros.
 
           HeapNoCopy      Does not preserve contents of existing bytes. If
                           this value is not given, the service preserves
                           the contents of existing bytes by copying the
                           contents of the old memory block into the new
                           block.
 
           All other values are reserved.
 
Return Value
 
The EAX register contains the ring-0 address of the new block if the service
is successful. Otherwise, EAX contains zero to indicate an error such as
insufficient memory to satisfy the request or an invalid address.
 
Comments
 
If this service is successful, it frees the old memory block, making the old
address invalid. Virtual devices must never rely on the old and new
addresses being the same. If this service returns an error, the old memory
block is not freed and the old address remains valid.
 
Since the system offers no protection on the heap, virtual devices must
provide their own protection to prevent overrunning allocated blocks.
 
The system offers no compaction on the heap; all memory blocks on the heap
are fixed. Virtual devices must not not to use the heap in such a way as to
severely fragment it.
 
Uses
 
EAX
 
See Also
 
_HeapAllocate, _HeapFree