MiCreateLargePageVad

NTSTATUS __stdcall MiCreateLargePageVad(_EPROCESS *TargetProcess, _MMVAD_SHORT *Vad){
  VOID *v2; 
  int v3; 
  __int64 Pool; 
  VOID *v5; 
  _ETHREAD *CurrentThread; 
  _EPROCESS *Process; 
  __int64 LongFlags1; 
  unsigned __int64 v12; 
  int v13; 
  int v14; 

  v3 = 1;
  Pool = 1i64;
  v5 = v2;
  if( (Vad->u.LongFlags & 0x100000) != 0 )
    Pool = -(__int64)(v2 != 0i64) & 1;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Process = CurrentThread->Tcb.ApcState.Process;
  if( Pool )
  {
    Pool = (__int64)MiAllocatePool(64i64, 0x48ui64, 0x624C6D4Dui64);
    if( !Pool )
      return -1073741670;
  }
  LongFlags1 = Vad->u1.LongFlags1;
  LODWORD(LongFlags1) = LongFlags1 & 0x7FFFFFFF;
  v12 = LongFlags1 | ((unsigned __int64)Vad->CommitChargeHigh << 31);
  if( !v12 )
  {
    if( !v5 )
      goto LABEL_24;
LABEL_23:
    ObfReferenceObjectWithTag(v5, 0x746C6644ui64);
    *(_QWORD *)(Pool + 24) = v5;
    goto LABEL_24;
  }
  if( !MiChargeProcessPhysicalPages(TargetProcess, LongFlags1 | ((unsigned __int64)Vad->CommitChargeHigh << 31)) )
  {
    if( Pool )
      ExFreePoolWithTag((PVOID)Pool, 0);
    return -1073741523;
  }
  if( v5 )
    goto LABEL_23;
  if( v13 || Process != TargetProcess )
    v3 = 0;
  else
    LOCK_ADDRESS_SPACE_SHARED(CurrentThread, TargetProcess);
  v14 = MiChargeFullProcessCommitment((ULONG_PTR)TargetProcess, v12);
  if( v3 )
    UNLOCK_ADDRESS_SPACE_SHARED(CurrentThread, TargetProcess);
  if( v14 < 0 )
  {
    _InterlockedExchangeAdd64((volatile signed __int64 *)&TargetProcess->VadPhysicalPages, -(__int64)v12);
    if( Pool )
      ExFreePoolWithTag((PVOID)Pool, 0);
    return v14;
  }
LABEL_24:
  if( Pool )
  {
    *(_DWORD *)(Pool + 64) = 16;
    MiInsertVadEvent((__int64)Vad, (_QWORD *)Pool, 0);
  }
  return 0;
}

Referenced by:

MiAllocateChildVads
MiMapViewOfImageSection
MiReserveUserMemory