HeapReAlloc    
The HeapReAlloc
function reallocates a block of memory from a heap. This function enables you
to resize a memory block and change other memory block properties. The
allocated memory is not movable. 
LPVOID HeapReAlloc(
|     HANDLE hHeap, | // handle to a heap
  block  | 
|     DWORD dwFlags, | // heap
  reallocation flags  | 
|     LPVOID lpMem, | // pointer to the
  memory to reallocate  | 
|     DWORD dwBytes  | // number of bytes
  to reallocate  | 
|    ); |  | 
Parameters
hHeap
Specifies the
heap from which the memory will be reallocated. This is a handle returned by
the HeapCreate
or GetProcessHeap
function. 
dwFlags
Specifies
several controllable aspects of heap reallocation. Specifying any of these
flags will override the corresponding flag specified in the flOptions
parameter when the heap was created by using the HeapCreate function. You can specify
one or more of the following flags: 
| Flag | Meaning | 
| HEAP_GENERATE_EXCEPTIONS | Specifies
  that the operating-system will raise an exception to indicate a function
  failure, such as an out-of-memory condition, instead of returning NULL. | 
| HEAP_NO_SERIALIZE | Specifies
  that mutual exclusion will not be used while this function is accessing the
  heap. For more information about HEAP_NO_SERIALIZE, see the Remarks section
  of HeapCreate. | 
| HEAP_REALLOC_IN_PLACE_ONLY | Specifies
  that there can be no movement when reallocating a memory block to a larger
  size. If this flag is not specified and the reallocation request is for a
  larger size, the function may move the block to a new location. If this flag
  is specified and the block cannot be enlarged without moving, the function
  will fail, leaving the original memory block unchanged. | 
| HEAP_ZERO_MEMORY | If the
  reallocation request is for a larger size, this flag specifies that the
  additional region of memory beyond the original size will be initialized to
  zero. The contents of the memory block up to its original size are
  unaffected. | 
lpMem
Points to the
block of memory that the function reallocates. This pointer is returned by an
earlier call to the HeapAlloc
or HeapReAlloc
function. 
dwBytes
Specifies the
new size of the memory block, in bytes. A memory block s size can be increased
or decreased by using this function. 
If the heap
specified by the hHeap parameter is a  non-growable  heap, dwBytes
must be less than 0x7FFF8. You create a non-growable heap by calling the HeapCreate
function with a nonzero value.
Return Values
If the
function succeeds, the return value is a pointer to the reallocated memory
block. 
If the
function fails and you have not specified HEAP_GENERATE_EXCEPTIONS, the return
value is NULL. 
If the
function fails and you have specified HEAP_GENERATE_EXCEPTIONS, the function
may generate the following exceptions: 
| Value | Meaning | 
| STATUS_NO_MEMORY | The
  reallocation attempt failed for lack of available memory. | 
| STATUS_ACCESS_VIOLATION | The
  reallocation attempt failed because of heap corruption or improper function
  parameters. | 
If the
function fails, it calls SetLastError. An application can call GetLastError for extended error
information.
Remarks
If HeapReAlloc
succeeds, it allocates at least the amount of memory requested. If the actual
amount allocated is greater than the amount requested, the process can use the
entire amount. To determine the actual size of the reallocated block, use the HeapSize
function. 
To free a
block of memory allocated by HeapReAlloc, use the HeapFree
function. 
See Also