15 #define BL_HEAP_POINTER_FLAG_BITS 3 141 if (HeapLimit <= Heap->HeapEnd)
203 ULONG BucketIndex = 0;
212 while (
Size >> BucketIndex)
218 return BucketIndex - 5;
229 BlStatusPrint(
L"Heap corruption in the links surrounding %p!\r\n", BufferEntry);
238 EfiPrintf(
L"Heap corruption in the links surrounding %p!\r\n", BufferEntry);
363 FreeEntry->BufferNext.BufferFree = 1;
419 Entry->BufferNext.BufferFree = 1;
621 if ((NextEntry >= FreeEntry) &&
639 BusyEntry = FreeEntry;
651 EfiPrintf(
L"Heap extended -- trying again\r\n");
659 return &BusyEntry->
Buffer;
699 if (BusyEntry->BufferNext.BufferFree)
710 NextEntry = NextEntry->
Flink;
struct _BL_FREE_HEAP_ENTRY * PBL_FREE_HEAP_ENTRY
BL_LIBRARY_PARAMETERS BlpLibraryParameters
#define STATUS_INSUFFICIENT_RESOURCES
struct _BL_HEAP_POINTER BL_HEAP_POINTER
struct _BL_BUSY_HEAP_ENTRY BL_BUSY_HEAP_ENTRY
NTSTATUS EfiStall(_In_ ULONG StallTime)
#define STATUS_INVALID_PARAMETER
BL_HEAP_POINTER BufferNext
PVOID BlMmAllocateHeap(_In_ SIZE_T Size)
BL_HEAP_POINTER BufferPrevious
FORCEINLINE ULONG MmHapBufferSize(_In_ PVOID FreeEntry)
struct _BL_FREE_HEAP_ENTRY BL_FREE_HEAP_ENTRY
IN PVOID IN PVOID IN USHORT IN USHORT Size
PBL_FREE_HEAP_ENTRY MmHapCoalesceFreeBuffer(_In_ PBL_FREE_HEAP_ENTRY FreeEntry)
#define InsertTailList(ListHead, Entry)
SIZE_T WINAPI HeapSize(HANDLE, DWORD, LPCVOID)
void __cdecl __debugbreak(void)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
static int Link(const char **args)
PBL_BUSY_HEAP_ENTRY HeapStart
BL_HEAP_POINTER BufferPrevious
PBL_BUSY_HEAP_ENTRY MmHapFindBufferInFreeList(_In_ ULONG Size)
#define BL_HEAP_POINTER_FLAG_BITS
#define STATUS_INTEGER_OVERFLOW
PBL_FREE_HEAP_ENTRY MmHapRemoveBufferFromFreeList(_In_ PBL_FREE_HEAP_ENTRY FreeEntry)
FORCEINLINE ULONG MmHapUserBufferSize(_In_ PVOID FreeEntry)
ULONG HapInitializationStatus
FORCEINLINE PBL_FREE_HEAP_ENTRY MmHapDecodeLink(_In_ BL_HEAP_POINTER Link)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
ULONG HapAllocationAttributes
struct _BL_HEAP_BOUNDARIES * PBL_HEAP_BOUNDARIES
struct _LIST_ENTRY * Flink
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS MmHaInitialize(_In_ ULONG HeapSize, _In_ ULONG HeapAttributes)
BL_HEAP_POINTER FreePrevious
#define NT_SUCCESS(StatCode)
BL_HEAP_POINTER BufferNext
#define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE
NTSTATUS MmHapHeapAllocatorExtend(_In_ ULONG ExtendSize)
#define STATUS_UNSUCCESSFUL
struct _BL_BUSY_HEAP_ENTRY * PBL_BUSY_HEAP_ENTRY
BOOLEAN BlBdDebuggerEnabled(VOID)
PBL_FREE_HEAP_ENTRY MmHapAddToFreeList(_In_ PBL_BUSY_HEAP_ENTRY Entry, _In_ ULONG Flags)
PBL_FREE_HEAP_ENTRY * MmFreeList
ULONG MmHapGetBucketId(_In_ ULONG Size)
VOID MmHapReportHeapCorruption(_In_ PBL_FREE_HEAP_ENTRY BufferEntry)
#define InitializeListHead(ListHead)
#define FIELD_OFFSET(t, f)
VOID EfiPrintf(_In_ PWCHAR Format,...)
UCHAR Buffer[ANYSIZE_ARRAY]
VOID BlStatusPrint(_In_ PCWCH Format,...)
PVOID MmHapCheckBufferLinks(_In_ PVOID BufferEntry)
#define RtlZeroMemory(Destination, Length)
#define ALIGN_UP_BY(size, align)
PVOID MmHapCheckFreeLinks(_In_ PVOID BufferEntry)
LIST_ENTRY MmHeapBoundaries
NTSTATUS BlMmFreeHeap(_In_ PVOID Buffer)
struct _BL_HEAP_POINTER * PBL_HEAP_POINTER
NTSTATUS MmPapAllocatePagesInRange(_Inout_ PVOID *PhysicalAddress, _In_ BL_MEMORY_TYPE MemoryType, _In_ ULONGLONG Pages, _In_ ULONG Attributes, _In_ ULONG Alignment, _In_opt_ PBL_ADDRESS_RANGE Range, _In_ ULONG Type)
struct _BL_HEAP_BOUNDARIES BL_HEAP_BOUNDARIES
base of all file and directory entries
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize