26 #define FREELDR_SECTION_COUNT 2 29 #define FREELDR_SECTION_COUNT 3 34 #define FREELDR_SECTION_COUNT 4 37 #define FREELDR_SECTION_COUNT 3 49 #if defined(__i386__) || defined(_PPC_) || defined(_MIPS_) || defined(_ARM_) 51 #define MM_PAGE_SIZE 4096 52 #define MM_PAGE_MASK 0xFFF 53 #define MM_PAGE_SHIFT 12 54 #define MM_MAX_PAGE 0xFFFFF 56 #define MM_SIZE_TO_PAGES(a) \ 57 ( ((a) >> MM_PAGE_SHIFT) + ((a) & MM_PAGE_MASK ? 1 : 0) ) 59 #endif // defined __i386__ or _PPC_ or _MIPS_ 63 #define MM_PAGE_SIZE 4096 64 #define MM_PAGE_MASK 0xFFF 65 #define MM_PAGE_SHIFT 12 66 #define MM_MAX_PAGE 0x3FFFF 68 #define MM_SIZE_TO_PAGES(a) \ 69 ( ((a) >> MM_PAGE_SHIFT) + ((a) & MM_PAGE_MASK ? 1 : 0) ) 74 #define HEAP_PAGES 0x400 75 #define STACK_PAGES 0x00 90 #define DUMP_MEM_MAP_ON_VERIFY 0 127 #define DEFAULT_HEAP_SIZE (1024 * 1024) 128 #define TEMP_HEAP_SIZE (32 * 1024 * 1024)
FORCEINLINE VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
BOOLEAN MmInitializeMemoryManager(VOID)
VOID FrLdrHeapVerify(PVOID HeapHandle)
TYPE_OF_MEMORY MemoryType
IN PVOID IN PVOID IN USHORT IN USHORT Size
PVOID FrLdrHeapAllocateEx(PVOID HeapHandle, SIZE_T ByteSize, ULONG Tag)
PFN_NUMBER MmFindAvailablePagesBeforePage(PVOID PageLookupTable, PFN_NUMBER TotalPageCount, PFN_NUMBER PagesNeeded, PFN_NUMBER LastPage)
VOID MmAllocatePagesInLookupTable(PVOID PageLookupTable, PFN_NUMBER StartPage, PFN_NUMBER PageCount, TYPE_OF_MEMORY MemoryType)
PVOID MmFindLocationForPageLookupTable(PFN_NUMBER TotalPageCount)
VOID MmSetMemoryType(PVOID MemoryAddress, SIZE_T MemorySize, TYPE_OF_MEMORY NewType)
_Must_inspect_result_ _In_ SIZE_T _In_ PVOID PageAddress
enum _TYPE_OF_MEMORY TYPE_OF_MEMORY
int WINAPI StartPage(_In_ HDC)
PFN_NUMBER LastFreePageHint
VOID MmInitializeHeap(PVOID PageLookupTable)
FORCEINLINE PVOID FrLdrTempAlloc(_In_ SIZE_T Size, _In_ ULONG Tag)
PFN_NUMBER FreePagesInLookupTable
PFN_NUMBER PageAllocationLength
PFN_NUMBER MmGetAddressablePageCountIncludingHoles(VOID)
TYPE_OF_MEMORY PageAllocated
PFN_NUMBER TotalPagesInLookupTable
PVOID MmAllocateHighestMemoryBelowAddress(SIZE_T MemorySize, PVOID DesiredAddress, TYPE_OF_MEMORY MemoryType)
VOID FrLdrHeapFreeEx(PVOID HeapHandle, PVOID Pointer, ULONG Tag)
PVOID MmAllocateMemory(SIZE_T MemorySize)
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
PPAGE_LOOKUP_TABLE_ITEM MmGetMemoryMap(PFN_NUMBER *NoEntries)
VOID MmInitPageLookupTable(PVOID PageLookupTable, PFN_NUMBER TotalPageCount)
VOID FrLdrHeapCleanupAll(VOID)
static CONST DWORD MemorySize[]
struct _FREELDR_MEMORY_DESCRIPTOR FREELDR_MEMORY_DESCRIPTOR
PVOID MmAllocateMemoryWithType(SIZE_T MemorySize, TYPE_OF_MEMORY MemoryType)
PVOID MmAllocateMemoryAtAddress(SIZE_T MemorySize, PVOID DesiredAddress, TYPE_OF_MEMORY MemoryType)
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
PFN_NUMBER MmCountFreePagesInLookupTable(PVOID PageLookupTable, PFN_NUMBER TotalPageCount)
PFN_NUMBER MmGetPageNumberFromAddress(PVOID Address)
PVOID PageLookupTableAddress
VOID MmFreeMemory(PVOID MemoryPointer)
BOOLEAN MmAreMemoryPagesAvailable(PVOID PageLookupTable, PFN_NUMBER TotalPageCount, PVOID PageAddress, PFN_NUMBER PageCount)
PFN_NUMBER MmFindAvailablePages(PVOID PageLookupTable, PFN_NUMBER TotalPageCount, PFN_NUMBER PagesNeeded, BOOLEAN FromEnd)
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER MaximumSize
VOID FrLdrHeapRelease(PVOID HeapHandle)
VOID MmMarkPagesInLookupTable(PVOID PageLookupTable, PFN_NUMBER StartPage, PFN_NUMBER PageCount, TYPE_OF_MEMORY PageAllocated)
_IRQL_requires_same_ _In_ CLONG ByteSize
struct _FREELDR_MEMORY_DESCRIPTOR * PFREELDR_MEMORY_DESCRIPTOR
PVOID FrLdrHeapCreate(SIZE_T MaximumSize, TYPE_OF_MEMORY MemoryType)
VOID FrLdrHeapDestroy(PVOID HeapHandle)
struct PAGE_LOOKUP_TABLE_ITEM * PPAGE_LOOKUP_TABLE_ITEM
VOID MmUpdateLastFreePageHint(PVOID PageLookupTable, PFN_NUMBER TotalPageCount)
FORCEINLINE VOID FrLdrTempFree(PVOID Allocation, ULONG Tag)