MiEmptyWorkingSetPrivatePagesByVa

VOID __fastcall MiEmptyWorkingSetPrivatePagesByVa(_MMSUPPORT_INSTANCE *WsInfo){
  char v1; 
  _ETHREAD *CurrentThread; 
  char v3; 
  _EPROCESS *Process; 
  _MMVAD_SHORT *Root; 
  _MMVAD_SHORT *i; 
  _MMVAD_SHORT *NextVad; 
  int v9; 
  _MMVAD *v10; 
  _MMVAD_SHORT **ExtraCreateInfo; 
  _MMVAD_SHORT *v12; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = v1;
  Process = CurrentThread->Tcb.ApcState.Process;
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockSharedEx(&Process->AddressCreationLock, 0i64);
  CurrentThread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 2u;
  if( (Process->Flags & 0x20) == 0 )
  {
    Root = (_MMVAD_SHORT *)Process->VadRoot.Root;
    i = 0i64;
    while( Root )
    {
      i = Root;
      Root = Root->NextVad;
    }
    while( i )
    {
      --CurrentThread->Tcb.SpecialApcDisable;
      ExAcquirePushLockExclusiveEx(&i->PushLock, 0i64);
      CurrentThread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 0x80u;
      if( (i->u.LongFlags & 4) == 0 )
      {
        LOBYTE(v9) = MiVadSupportsPrivateCommit((INT64)i);
        if( v9 )
        {
          if( !MiVadMapsLargeImage(v10) )
            MiEmptyWorkingSetInitiate(
              (INT64)WsInfo,
              v3 | 2,
              (i->StartingVpn | ((unsigned __int64)i->StartingVpnHigh << 32)) << 12,
              ((i->EndingVpn | ((unsigned __int64)i->EndingVpnHigh << 32)) << 12) | 0xFFF);
        }
      }
      MiUnlockVad(CurrentThread, i);
      ExtraCreateInfo = (_MMVAD_SHORT **)i->ExtraCreateInfo;
      v12 = i;
      if( ExtraCreateInfo )
      {
        NextVad = *ExtraCreateInfo;
        for( i = (_MMVAD_SHORT *)i->ExtraCreateInfo; NextVad; NextVad = NextVad->NextVad )
          i = NextVad;
      }
      else
      {
        while( 1 )
        {
          i = (_MMVAD_SHORT *)(i->VadNode.ParentValue & 0xFFFFFFFFFFFFFFFCui64);
          if( !i || i->NextVad == v12 )
            break;
          v12 = i;
        }
      }
    }
  }
  UNLOCK_ADDRESS_SPACE_SHARED(CurrentThread, Process);
}

Referenced by:

MiFlushAllPages
MmProcessWorkingSetControl