HvlpAddPhysicalMemory

NTSTATUS __stdcall HvlpAddPhysicalMemory(UINT64 PageNumber, UINT64 PageCount){
  UINT64 v2; 
  int v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  UINT16 v7; 
  UINT16 v8; 
  PHYSICAL_ADDRESS v10[2]; 
  __int128 v11; 
  PHYSICAL_ADDRESS PageInfo[2]; 
  __int128 v13; 
  char v14[16]; 
  char StackBuffer[32]; 

  v2 = PageCount;
  v4 = 0;
  *(_OWORD *)&PageInfo[0].anonymous_0.LowPart = 0i64;
  v13 = 0i64;
  *(_OWORD *)&v10[0].anonymous_0.LowPart = 0i64;
  v11 = 0i64;
  while( v2 )
  {
    v5 = HvlpAcquireHypercallPage(PageInfo, 1ui64, StackBuffer, 0x10ui64);
    v6 = HvlpAcquireHypercallPage(v10, 2ui64, v14, 8ui64);
    *v5 = PageNumber;
    v5[1] = v2;
    HvcallInitiateHypercall();
    v8 = v7;
    v2 -= *v6;
    PageNumber += *v6;
    HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)v10);
    HvlpReleaseHypercallPage((_HVLP_HYPERCALL_PAGE_INFO *)PageInfo);
    if( v8 == 11 )
    {
      v4 = HvlpDepositPages(0);
      if( v4 < 0 )
        return -1073741670;
    }
    else if( v8 )
    {
      return HvlpHvToNtStatus(v8);
    }
  }
  return v4;
}

Referenced by:

KeConfigureDynamicMemory