HalpMmAllocateMemoryInternal
PSTR __stdcall HalpMmAllocateMemoryInternal(UINT64 Size, MEMORY_CACHING_TYPE CacheType){
unsigned int v3;
PSTR result;
signed int v5;
UINT64 v6;
CHAR *v7;
if( !HalpMmLoaderBlock || *((_DWORD *)KeGetPcr() + 105) )
KeBugCheckEx(0x5Cu, 0x8000ui64, 0x8675309ui64, 0i64, 0i64);
if( (unsigned int)CacheType > MmCached )
return 0i64;
v3 = (Size + 7) & 0xFFFFFFF8;
if( HalpMmLeftoverMemorySize >= v3 )
{
result = (PSTR)HalpMmLeftoverMemory;
HalpMmLeftoverMemory += v3;
HalpMmLeftoverMemorySize -= v3;
return result;
}
v5 = (v3 + 4095) >> 12;
v6 = HalpAllocPhysicalMemory(HalpMmLoaderBlock, 0i64);
if( !v6 )
return 0i64;
v7 = (CHAR *)HalpMap((LARGE_INTEGER)v6, (MEMORY_CACHING_TYPE)v5, CacheType == MmCached);
if( v7 )
{
HalpMmLeftoverMemory = (__int64)&v7[v3];
HalpMmLeftoverMemorySize = (v5 << 12) - v3;
}
return v7;
}Referenced by:
ExtEnvAllocateMemory
ExtEnvRegisterIommu
HalRegisterPermanentAddressUsage
HalSocRequestApi
HalpBlkAllocateShadowData
HalpCopyDebugDescriptor
HalpExtInitExtensions
HalpExtRegisterResourceDescriptor
HalpInitializeInterrupts
HalpInterruptInitializeIpis
HalpInterruptMapParkedPage
HalpInterruptParseMadt
HalpInterruptRegisterController
HalpInterruptRegisterLine
HalpIommuCreateDmarPageTable
HalpIommuPopulateExceptionList
HalpIommuProcessReservationsInternal
HalpMmAllocateMemory
HalpMmAllocatePerProcessorMemory
HalpPowerInitNvsRegionData
HalpRegisterDmaController
HalpSetupAcpiPhase0
HalpTimerCreateReferencePage
HalpTimerRegister