#ifndef _NTRTL_H
/**
* The RtlFreeHeap routine frees a memory block allocated from a heap.
*
* \param HeapHandle A handle to the heap from which the block was allocated.
* \param Flags Heap free flags (for example, HEAP_NO_SERIALIZE).
* \param BaseAddress The block to free.
* \return TRUE if the block was freed; otherwise, FALSE.
* \remarks Operations are bound to the originating heap and valid allocation base. Never use them to probe arbitrary pointers. FreeHeap accepts a NULL block as a no-op; SizeHeap failure uses SIZE_T -1. Preserve the old pointer when reallocation fails. Heap flags can select exceptions instead of simple failure returns.
*/
#if (PHNT_VERSION >= PHNT_WINDOWS_8)
_Success_(return != 0)
NTSYSAPI
LOGICAL
NTAPI
RtlFreeHeap(
_In_ HANDLE HeapHandle,
_In_opt_ ULONG Flags,
_Frees_ptr_opt_ _Post_invalid_ PVOID BaseAddress
);
View code on GitHub#ifndef _NTRTL_H
/**
* The RtlFreeHeap routine frees a memory block allocated from a heap.
*
* \param HeapHandle A handle to the heap from which the block was allocated.
* \param Flags Heap free flags (for example, HEAP_NO_SERIALIZE).
* \param BaseAddress The block to free.
* \return TRUE if the block was freed; otherwise, FALSE.
* \remarks Operations are bound to the originating heap and valid allocation base. Never use them to probe arbitrary pointers. FreeHeap accepts a NULL block as a no-op; SizeHeap failure uses SIZE_T -1. Preserve the old pointer when reallocation fails. Heap flags can select exceptions instead of simple failure returns.
*/
#if (PHNT_VERSION >= PHNT_WINDOWS_8)
// ...
#else
_Success_(return)
NTSYSAPI
BOOLEAN
NTAPI
RtlFreeHeap(
_In_ HANDLE HeapHandle,
_In_opt_ ULONG Flags,
_Frees_ptr_opt_ PVOID BaseAddress
);
View code on GitHub// ntifs.h
NTSYSAPI LOGICAL RtlFreeHeap(
[in] PVOID HeapHandle,
[in, optional] ULONG Flags,
_Frees_ptr_opt_ PVOID BaseAddress
);
View the official Windows Driver Kit DDI reference// ntifs.h
BOOLEAN RtlFreeHeap(
_In_ PVOID HeapHandle,
_In_opt_ ULONG Flags,
_In_ PVOID HeapBase
);
View the official Win32 development documentationNo description available.
The RtlFreeHeap routine frees a memory block that was allocated from a heap by RtlAllocateHeap.
HeapHandle [in]A handle for the heap whose memory block is to be freed. This parameter is a handle returned by RtlCreateHeap.
Flags [in, optional]A set of flags that controls aspects of freeing a memory block. Specifying the following value overrides the corresponding value that was specified in the Flags parameter when the heap was created by RtlCreateHeap.
| Flag | Meaning |
|---|---|
| HEAP_NO_SERIALIZE | Mutual exclusion will not be used when RtlFreeHeap is accessing the heap. |
BaseAddressA pointer to the memory block to free. This pointer is returned by RtlAllocateHeap.
RtlFreeHeap returns TRUE if the block was freed successfully; FALSE otherwise.
Note Starting with Windows 8 the return value is typed as LOGICAL, which has a different size than BOOLEAN.
Frees a memory block that was allocated from a heap by RtlAllocateHeap.
HeapHandle [in]
A handle for the heap whose memory block is to be freed. This parameter is a handle returned by RtlCreateHeap.
Flags [in, optional]
A set of flags that controls aspects of freeing a memory block. Specifying the following value overrides the corresponding value that was specified in the Flags parameter when the heap was created by RtlCreateHeap.
| Flag | Meaning |
|---|---|
| HEAP_NO_SERIALIZE |
Mutual exclusion will not be used when RtlFreeHeap is accessing the heap. |
HeapBase [in]
A pointer to the memory block to free. This pointer is returned by RtlAllocateHeap.
Returns TRUE if the block was freed successfully; FALSE otherwise.
[!Note] Starting with Windows 8 the return value is typed as LOGICAL, which has a different size than BOOLEAN.
| Requirement | Value |
|---|---|
| Minimum supported client |
Windows 2000 Professional [desktop apps only] |
| Minimum supported server |
Windows 2000 Server [desktop apps only] |
| Target platform |
Universal |
| Header |
Ntifs.h (include Ntifs.h) |
| Library |
Ntdll.lib |
| DLL |
Ntdll.dll |
This function is documented in Windows Driver Kit.
Maps directly to Win32 API HeapFree from Kernel32.dll.