2272{
2280
2281
2283
2284
2285 Heap = (
PHEAP)HeapPtr;
2287
2288
2291
2292
2294
2295
2297 {
2298
2302 {
2303
2304 DPRINT1(
"HEAP: Trying to free an invalid address %p!\n",
Ptr);
2307 }
2308 }
2310 {
2311
2312 DPRINT1(
"HEAP: Trying to free an invalid address %p!\n",
Ptr);
2315 }
2317
2318
2320 {
2323 }
2324
2326 {
2327
2329
2330
2332
2333
2334
2335 BlockSize = 0;
2337 (
PVOID *)&VirtualEntry,
2338 &BlockSize,
2340
2342 {
2343 DPRINT1(
"HEAP: Failed releasing memory with Status 0x%08X. Heap %p, ptr %p, base address %p\n",
2346 }
2347 }
2348 else
2349 {
2350
2351 BlockSize = HeapEntry->Size;
2352
2353
2354
2355
2358 {
2361 &BlockSize,
2363 }
2364
2365
2368 {
2370 }
2371 else
2372 {
2373
2375
2377 TagIndex != 0)
2378 {
2379
2381 }
2382 }
2383 }
2384
2385
2387
2389}
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI RtlEnterHeapLock(IN OUT PHEAP_LOCK Lock, IN BOOLEAN Exclusive)
KPROCESSOR_MODE NTAPI RtlpGetMode(VOID)
NTSTATUS NTAPI RtlLeaveHeapLock(IN OUT PHEAP_LOCK Lock)
#define RemoveEntryList(Entry)
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
#define EXCEPTION_EXECUTE_HANDLER
NTSYSAPI void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS)
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
#define HEAP_DISABLE_COALESCE_ON_FREE
#define NtCurrentProcess()
#define HEAP_NO_SERIALIZE
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
PHEAP_FREE_ENTRY NTAPI RtlpCoalesceFreeBlocks(PHEAP Heap, PHEAP_FREE_ENTRY FreeEntry, PSIZE_T FreeSize, BOOLEAN Remove)
static VOID RtlpDeCommitFreeBlock(PHEAP Heap, PHEAP_FREE_ENTRY FreeEntry, SIZE_T Size)
VOID NTAPI RtlpInsertFreeBlock(PHEAP Heap, PHEAP_FREE_ENTRY FreeEntry, SIZE_T BlockSize)
struct _HEAP_ENTRY * PHEAP_ENTRY
FORCEINLINE BOOLEAN RtlpHeapIsSpecial(ULONG Flags)
BOOLEAN NTAPI RtlDebugFreeHeap(HANDLE HeapPtr, ULONG Flags, PVOID Ptr)
#define HEAP_ENTRY_VIRTUAL_ALLOC
SIZE_T DeCommitFreeBlockThreshold
SIZE_T DeCommitTotalFreeThreshold
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
_Must_inspect_result_ _In_ ULONG Flags