MiInsertVadCharges

NTSTATUS __stdcall MiInsertVadCharges(_MMVAD_SHORT *Vad, ULONG_PTR CurrentProcess){
  unsigned __int64 v3; 
  UINT64 v4; 
  _EPROCESS *v5; 
  unsigned __int64 v6; 
  __int64 LongFlags1; 
  VOID *v8; 
  unsigned __int64 v9; 
  VOID *v10; 
  NTSTATUS result; 
  int v12; 
  unsigned int v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  _ETHREAD *CurrentThread; 
  int v17; 
  _EPROCESS *v18; 
  UINT64 v19; 
  _EPROCESS *v20; 
  _MI_PARTITION *ProcessPartition; 
  __int64 ********v22; 
  __int64 v23; 
  _MI_PARTITION *v24; 

  v3 = 0i64;
  v4 = 0i64;
  v5 = *(_EPROCESS **)&CurrentProcess;
  v6 = Vad->StartingVpn | ((unsigned __int64)Vad->StartingVpnHigh << 32);
  LongFlags1 = Vad->u1.LongFlags1;
  LODWORD(LongFlags1) = LongFlags1 & 0x7FFFFFFF;
  v8 = (VOID *)(((Vad->EndingVpn | ((unsigned __int64)Vad->EndingVpnHigh << 32)) << 12) | 0xFFF);
  v9 = LongFlags1 | ((unsigned __int64)Vad->CommitChargeHigh << 31);
  v10 = (VOID *)(v6 << 12);
  if( v9 >= 0x7FFFFFFFDi64 )
  {
    if( v9 == 0x7FFFFFFFDi64 )
    {
      result = PsChargeProcessNonPagedPoolQuota(*(_EPROCESS **)&CurrentProcess, 0x40ui64);
      if( result < 0 )
        return result;
    }
    goto LABEL_10;
  }
  result = PsChargeProcessNonPagedPoolQuota(*(_EPROCESS **)&CurrentProcess, 0x88ui64);
  if( result < 0 )
    return result;
  if( (Vad->u.LongFlags & 0x100000) == 0 && !MiVadPureReserve(Vad) )
  {
    v3 = 8
       * ((Vad->EndingVpn | ((unsigned __int64)Vad->EndingVpnHigh << 32))
        - (Vad->StartingVpn | ((unsigned __int64)Vad->StartingVpnHigh << 32)))
       + 8;
    if( v5 != PsInitialSystemProcess )
    {
      v12 = PspChargeQuota(v5->QuotaBlock, v5, PsResourcePagedPool, v3);
      if( v12 < 0 )
      {
        PsReturnProcessNonPagedPoolQuota(v5, 0x88ui64);
        return v12;
      }
    }
  }
  v13 = Vad->u.LongFlags & 0x70;
  if( v13 == 48 )
  {
    if( (Vad->u.LongFlags & 0x3100000) == 34603008 )
      v22 = 0i64;
    else
      v22 = MiLocateVadEvent((__int64)Vad, 256) + 1;
    LODWORD(v19) = MiComputeAweCharges((__int64)Vad, (INT64)v22);
  }
  else
  {
    if( v13 != 64 && v13 != 16 )
      goto LABEL_10;
    LODWORD(v19) = MiResidentPagesForSpan(v10, v8);
  }
  v4 = v19;
  if( !v19
    || (ProcessPartition = MiGetProcessPartition(v5, v20),
        MiChargeResident((ULONG_PTR *)&ProcessPartition->Core.PartitionId, v4, 0x80ui64)) )
  {
LABEL_10:
    v14 = Vad->u1.LongFlags1;
    LODWORD(v14) = v14 & 0x7FFFFFFF;
    v15 = v14 | ((unsigned __int64)Vad->CommitChargeHigh << 31);
    if( v15 >= 0x7FFFFFFFDi64 && v15 != 0x7FFFFFFFEi64
      || (CurrentThread = (_ETHREAD *)KeGetCurrentThread(),
          LOCK_PAGE_TABLE_COMMITMENT(CurrentThread, v5),
          v17 = MiCommitPageTablesForVad(Vad, v10, v8),
          UNLOCK_PAGE_TABLE_COMMITMENT(CurrentThread, v5),
          v17 >= 0) )
    {
      MiSetVadBits(Vad);
      return 0;
    }
    goto LABEL_27;
  }
  v4 = 0i64;
  v17 = -1073741670;
LABEL_27:
  v23 = Vad->u1.LongFlags1;
  LODWORD(v23) = v23 & 0x7FFFFFFF;
  if( (v23 | ((unsigned __int64)Vad->CommitChargeHigh << 31)) < 0x7FFFFFFFDi64 )
    PsReturnProcessNonPagedPoolQuota(v5, 0x88ui64);
  if( v3 )
    PsReturnProcessPagedPoolQuota((ULONG_PTR)v5, v3);
  if( v4 )
  {
    v24 = MiGetProcessPartition(v5, v18);
    MiReturnResident((INT64)v24, v4);
  }
  return v17;
}

Referenced by:

MiAllocateEnclaveVad
MiAllocateNewSubAllocatedRegion
MiDeletePartialVad
MiInsertChildVads
MiInsertProcessVads
MiMapLockedPagesInUserSpace
MiMapViewOfDataSection
MiMapViewOfImageSection
MiMapViewOfPhysicalSection
MiReserveUserMemory