MiFreeLargePageView

VOID __stdcall MiFreeLargePageView(_EPROCESS *TargetProcess, _MMVAD_SHORT *Vad, UINT64 Flags){
  char v3; 
  __int64 LongFlags1; 
  unsigned __int64 v6; 
  _ETHREAD *CurrentThread; 
  int v9; 
  VOID *v10; 

  LongFlags1 = Vad->u1.LongFlags1;
  LODWORD(LongFlags1) = LongFlags1 & 0x7FFFFFFF;
  v6 = LongFlags1 | ((unsigned __int64)Vad->CommitChargeHigh << 31);
  if( v6 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    _InterlockedExchangeAdd64((volatile signed __int64 *)&TargetProcess->VadPhysicalPages, -(__int64)v6);
    if( !Flags || !*(_QWORD *)(Flags + 24) )
    {
      v9 = v3 & 1;
      if( (v3 & 1) == 0 )
        LOCK_ADDRESS_SPACE_SHARED(CurrentThread, TargetProcess);
      MiReturnFullProcessCommitment(TargetProcess, v6);
      if( !v9 )
        UNLOCK_ADDRESS_SPACE_SHARED(CurrentThread, TargetProcess);
    }
  }
  if( Flags )
  {
    v10 = *(VOID **)(Flags + 24);
    if( v10 )
      ObfDereferenceObjectWithTag(v10, 0x746C6644ui64);
  }
}

Referenced by:

MiDeletePartialCloneVads
MiReleaseVadEventBlocks