MiAllocateFixupVad

_MMVAD *__stdcall MiAllocateFixupVad(_MMVAD *Vad){
  _CONTROL_AREA *ControlArea; 
  VOID *Pool; 
  _MMVAD *v4; 
  unsigned __int64 v5; 
  int v6; 
  _MMVAD *result; 

  ControlArea = Vad->Subsection->ControlArea;
  if( !ControlArea->u2.SeImageStub->DynamicRelocations )
    return 0i64;
  Pool = MiAllocatePool(
           64i64,
           8
         * (((unsigned __int64)ControlArea->Segment->TotalNumberOfPtes >> 6)
          + ((ControlArea->Segment->TotalNumberOfPtes & 0x3F) != 0)
          + 20i64),
           0x49646156ui64);
  v4 = (_MMVAD *)Pool;
  if( !Pool )
    return 0i64;
  *($AFD36CF592B801F1959B792F1D304775 *)Pool = Vad->Core.0;
  *((_OWORD *)Pool + 1) = *(_OWORD *)&Vad->Core.VadNode._bf_0;
  *((_OWORD *)Pool + 2) = *(_OWORD *)&Vad->Core.StartingVpnHigh;
  *((_OWORD *)Pool + 3) = *(_OWORD *)&Vad->Core.u.LongFlags;
  *((_OWORD *)Pool + 4) = *(_OWORD *)&Vad->u2.LongFlags2;
  *((_OWORD *)Pool + 5) = *(_OWORD *)&Vad->FirstPrototypePte;
  *((_OWORD *)Pool + 6) = Vad->ViewLinks;
  *((_OWORD *)Pool + 7) = *(_OWORD *)&Vad->VadsProcess;
  *((_QWORD *)Pool + 16) = Vad->FileObject;
  *((_QWORD *)Pool + 17) = -4096 * (((__int64)Vad->FirstPrototypePte - *(_QWORD *)ControlArea[1].gap8) >> 3)
                         + ((Vad->Core.StartingVpn | ((unsigned __int64)Vad->Core.StartingVpnHigh << 32)) << 12)
                         - (unsigned __int64)ControlArea->Segment->ExtendInfo;
  LODWORD(v5) = MiInitializePrivateFixupBitmap((_RTL_BITMAP *)Pool + 9, ControlArea);
  v6 = (v5 ^ v4->Core.u1.LongFlags1) & 0x7FFFFFFF;
  v4->Core.CommitChargeHigh = v5 >> 31;
  v4->Core.u1.LongFlags1 ^= v6;
  result = v4;
  v4->Core.u.LongFlags |= 0x200000u;
  return result;
}

Referenced by:

MiMapViewOfImageSection