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