MiProcessWsInSwapSupport

void __fastcall MiProcessWsInSwapSupport(__int64 a1, char a2){
  _QWORD *v2; 
  __int64 v3; 
  char **v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 

  v2 = *(_QWORD **)a1;
  v3 = 0i64;
  v5 = *(char ***)a1;
  v6 = *(_QWORD *)a1 + 16i64 * *(_QWORD *)(a1 + 16);
  if( *(_QWORD *)a1 < v6 )
  {
    do
    {
      v7 = v2[1] >> 12;
      if( (unsigned __int64)(v7 + v3) >= 0x1000 )
      {
        v8 = 4096 - v3;
        if( (a2 & 4) != 0 )
        {
          v10 = *v2 + (v8 << 12);
          if( ((*v2 ^ (v10 - 1)) & 0xFFFFFFFFFFE00000ui64) != 0 )
            v8 -= (v10 >> 12) & 0x1FF;
        }
        v9 = v7 - v8;
        v2[1] = v8 << 12;
        MiProcessWsInSwapRanges(v5, (unsigned __int64)v2, a2);
        if( v9 )
        {
          v5 = (char **)v2;
          *v2 += v2[1];
          v2[1] = v9 << 12;
          v2 -= 2;
        }
        else
        {
          v5 = (char **)(v2 + 2);
        }
        v3 = 0i64;
      }
      else
      {
        v3 += v7;
      }
      v2 += 2;
    }
    while( (unsigned __int64)v2 < v6 );
    if( v3 )
      MiProcessWsInSwapRanges(v5, (unsigned __int64)(v2 - 2), a2);
  }
}

Referenced by:

MiInSwapSharedWorkingSetWorker
MmInSwapVirtualAddresses
MmInSwapWorkingSet