HeapAlloc

From aldeid
Jump to navigation Jump to search

Description

Allocates a block of memory from a heap. The allocated memory is not movable.

Syntax

LPVOID WINAPI HeapAlloc(
  _In_ HANDLE hHeap,
  _In_ DWORD  dwFlags,
  _In_ SIZE_T dwBytes
);

Parameters

hHeap [in]
A handle to the heap from which the memory will be allocated. This handle is returned by the HeapCreate or GetProcessHeap function.
dwFlags [in]
The heap allocation options. Specifying any of these values will override the corresponding value specified when the heap was created with HeapCreate. This parameter can be one or more of the following values.
Value Meaning
HEAP_GENERATE_EXCEPTIONS
0x00000004

The system will raise an exception to indicate a function failure, such as an out-of-memory condition, instead of returning NULL.

To ensure that exceptions are generated for all calls to this function, specify HEAP_GENERATE_EXCEPTIONS in the call to HeapCreate. In this case, it is not necessary to additionally specify HEAP_GENERATE_EXCEPTIONS in this function call.

HEAP_NO_SERIALIZE
0x00000001

Serialized access will not be used for this allocation.

To ensure that serialized access is disabled for all calls to this function, specify HEAP_NO_SERIALIZE in the call to HeapCreate. In this case, it is not necessary to additionally specify HEAP_NO_SERIALIZE in this function call.

This value should not be specified when accessing the process's default heap. The system may create additional threads within the application's process, such as a CTRL+C handler, that simultaneously access the process's default heap.

HEAP_ZERO_MEMORY
0x00000008
The allocated memory will be initialized to zero. Otherwise, the memory is not initialized to zero.
dwBytes [in]
The number of bytes to be allocated.
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 value

If the function succeeds, the return value is a pointer to the allocated 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 either of the exceptions listed in the following table. The particular exception depends upon the nature of the heap corruption. For more information, see GetExceptionCode.

Exception code Description
STATUS_NO_MEMORY The allocation attempt failed because of a lack of available memory or heap corruption.
STATUS_ACCESS_VIOLATION The allocation attempt failed because of heap corruption or improper function parameters.

If the function fails, it does not call SetLastError. An application cannot call GetLastError for extended error information.