MiUnlinkStandbyBatch

UINT64 __fastcall MiUnlinkStandbyBatch(
        _MMPFN *BaseStandbyPfn,
        _MMPTE *ProtoPte,
        UINT64 OldPriority,
        _MMPTE *PoINTerPte,
        UINT64 NumberOfPtes,
        _MMPFN **PfnToDiscard){
  UINT64 v6; 
  int v8; 
  _MMPFN *PfnDb; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  INT64 v13; 
  char v14; 
  char v15; 
  int v16; 
  v6 = NumberOfPtes;
  v8 = OldPriority;
  if( !NumberOfPtes )
    return NumberOfPtes - v6;
  do
  {
    PfnDb = MmGetPfnDb();
    while( 1 )
    {
      while( 1 )
      {
        v11 = *(_QWORD *)ProtoPte;
        v12 = *(_QWORD *)ProtoPte;
        if( (*(_QWORD *)ProtoPte & 1) != 0 )
          goto LABEL_11;
        if( (*(_QWORD *)ProtoPte & 0xC00i64) != 2048 )
          return NumberOfPtes - v6;
        if( !v11 || !qword_140C4DC80 || (qword_140C4DC80 & v11) != 0 )
        {
          v12 = *(_QWORD *)ProtoPte;
          if( qword_140C4DC80 && (v11 & 0x10) == 0 )
            v12 = v11 & ~qword_140C4DC80;
LABEL_11:
          if( (*((_QWORD *)PfnDb + 6 * ((v12 >> 12) & 0xFFFFFFFFFi64) + 5) & 0x4000000000000i64) != 0 )
            break;
        }
      }
      v13 = (INT64)PfnDb + 48 * ((v12 >> 12) & 0xFFFFFFFFFi64);
      if( _interlockedbittestandset64((volatile signed __int32 *)(v13 + 24), 0x3Fui64) )
        return NumberOfPtes - v6;
      if( *(_QWORD *)ProtoPte == v11 )
        break;
      _InterlockedAnd64((volatile signed __int64 *)(v13 + 24), 0x7FFFFFFFFFFFFFFFui64);
    }
    if( !v13 )
      break;
    if( (*(_QWORD *)ProtoPte & 1) == 0 )
    {
      v14 = *(_BYTE *)(v13 + 34);
      if( (v14 & 0x20) == 0 )
      {
        v15 = *(_BYTE *)(v13 + 35);
        if( (v15 & 0x40) == 0 && (v14 & 7) == 2 )
        {
          v16 = (v15 & 8) != 0 ? 5 : v15 & 7;
          if( v16 == v8 && (!MiIsPfnFromSlabAllocation(v13) || *(_WORD *)(v13 + 32) || *(__int64 *)v13 >= 0) )
            continue;
        }
      }
    }
    _InterlockedAnd64((volatile signed __int64 *)(v13 + 24), 0x7FFFFFFFFFFFFFFFui64);
    return NumberOfPtes - v6;
    if( !(unsigned int)MiUnlinkPageFromList((_MMPFN *)v13, 1ui64) )
    {
      *PfnToDiscard = (_MMPFN *)v13;
      return NumberOfPtes - v6;
    }
    PoINTerPte = (_MMPTE *)((char *)PoINTerPte + 8);
    ProtoPte = (_MMPTE *)((char *)ProtoPte + 8);
    MiReadyStandbyPageForActive((_MMPFN *)v13, PoINTerPte);
    _InterlockedAnd64((volatile signed __int64 *)(v13 + 24), 0x7FFFFFFFFFFFFFFFui64);
    --v6;
  }
  while( v6 );
  return NumberOfPtes - v6;
}

Referenced by:

MmCheckCachedPageStates