MiInsertVadCharges

INT64 __fastcall MiInsertVadCharges(__int64 a1, ULONG_PTR a2){
  UINT64 v3; 
  unsigned __int64 v4; 
  unsigned __int64 v6; 
  __int64 v7; 
  void *v8; 
  unsigned __int64 v9; 
  void *v10; 
  INT64 result; 
  int v12; 
  int v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  _ETHREAD *CurrentThread; 
  int v17; 
  UINT64 v18; 
  ULONG_PTR *v19; 
  INT64 ***v20; 
  __int64 v21; 
  INT64 v22; 
  v3 = 0i64;
  v4 = 0i64;
  v6 = *(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32);
  v7 = *(unsigned int *)(a1 + 52);
  LODWORD(v7) = v7 & 0x7FFFFFFF;
  v8 = (void *)(((*(unsigned int *)(a1 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 33) << 32)) << 12) | 0xFFF);
  v9 = v7 | ((unsigned __int64)*(unsigned __int8 *)(a1 + 34) << 31);
  v10 = (void *)(v6 << 12);
  if( v9 >= 0x7FFFFFFFDi64 )
  {
    if( v9 == 0x7FFFFFFFDi64 )
    {
      result = PsChargeProcessNonPagedPoolQuota(a2, 0x40ui64);
      if( (int)result < 0 )
        return result;
    }
    goto LABEL_10;
  }
  result = PsChargeProcessNonPagedPoolQuota(a2, 0x88ui64);
  if( (int)result < 0 )
    return result;
  if( (*(_DWORD *)(a1 + 48) & 0x100000) == 0 && !(unsigned int)MiVadPureReserve(a1) )
  {
    v3 = 8
       * ((*(unsigned int *)(a1 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 33) << 32))
        - (*(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32)))
       + 8;
    if( (PEPROCESS)a2 != PsInitialSystemProcess )
    {
      v12 = PspChargeQuota(*(_QWORD *)(a2 + 1384), a2, 1i64, v3);
      if( v12 < 0 )
      {
        PsReturnProcessNonPagedPoolQuota(a2, 0x88ui64);
        return(unsigned int)v12;
      }
    }
  }
  v13 = *(_DWORD *)(a1 + 48) & 0x70;
  if( v13 == 48 )
  {
    if( (*(_DWORD *)(a1 + 48) & 0x3100000) == 34603008 )
      v20 = 0i64;
    else
      v20 = MiLocateVadEvent(a1, 256i64) + 1;
    v18 = MiComputeAweCharges(a1, (INT64)v20);
  }
  else
  {
    if( v13 != 64 && v13 != 16 )
      goto LABEL_10;
    v18 = MiResidentPagesForSpan(v10, v8);
  }
  v4 = v18;
  if( !v18 || (MiGetProcessPartition((_EPROCESS *)a2), (unsigned int)MiChargeResident(v19, v4, 128i64)) )
  {
LABEL_10:
    v14 = *(unsigned int *)(a1 + 52);
    LODWORD(v14) = v14 & 0x7FFFFFFF;
    v15 = v14 | ((unsigned __int64)*(unsigned __int8 *)(a1 + 34) << 31);
    if( v15 >= 0x7FFFFFFFDi64 && v15 != 0x7FFFFFFFEi64
      || (CurrentThread = (_ETHREAD *)KeGetCurrentThread(),
          LOCK_PAGE_TABLE_COMMITMENT(CurrentThread, (_EPROCESS *)a2),
          v17 = MiCommitPageTablesForVad(a1, (unsigned __int64)v10, (unsigned __int64)v8),
          UNLOCK_PAGE_TABLE_COMMITMENT((__int64)CurrentThread, a2),
          v17 >= 0) )
    {
      MiSetVadBits(a1);
      return 0i64;
    }
    goto LABEL_27;
  }
  v4 = 0i64;
  v17 = -1073741670;
LABEL_27:
  v21 = *(unsigned int *)(a1 + 52);
  LODWORD(v21) = v21 & 0x7FFFFFFF;
  if( (v21 | ((unsigned __int64)*(unsigned __int8 *)(a1 + 34) << 31)) < 0x7FFFFFFFDi64 )
    PsReturnProcessNonPagedPoolQuota(a2, 0x88ui64);
  if( v3 )
    PsReturnProcessPagedPoolQuota(a2, v3);
  if( v4 )
  {
    MiGetProcessPartition((_EPROCESS *)a2);
    MiReturnResident(v22, v4);
  }
  return(unsigned int)v17;
}

Referenced by:

MiAllocateEnclaveVad
MiAllocateNewSubAllocatedRegion
MiDeletePartialVad
MiInsertChildVads
MiInsertProcessVads
MiMapLockedPagesInUserSpace
MiMapViewOfDataSection
MiMapViewOfImageSection
MiMapViewOfPhysicalSection
MiReserveUserMemory