MiRemoveBadPages

INT64 __fastcall MiRemoveBadPages(INT64 a1, UINT64 a2, UINT64 a3){
  UINT64 v4; 
  _ETHREAD *CurrentThread; 
  unsigned __int64 v7; 
  unsigned int v8; 
  UINT64 v9; 
  char *v10; 
  _QWORD *v11; 
  unsigned __int8 v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  _RTL_ATOM_TABLE *v15; 
  _ETHREAD *v16; 
  v4 = a2;
  if( (MiFlags & 0x8000000) == 0 )
    return 3221225474i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v7 = 0i64;
  v16 = CurrentThread;
  v8 = 0;
  v9 = 6 * a2;
  v10 = (char *)MmGetPfnDb() + 48 * a2;
  --*((_WORD *)CurrentThread + 243);
  ExAcquirePushLockSharedEx((UINT64)&qword_140C50B80, 0i64);
  if( a3 )
  {
    v11 = (_QWORD *)((char *)MmGetPfnDb() + 8 * v9 + 40);
    while( v4 <= 0xFFFFFFFFFi64 && (*v11 & 0x4000000000000i64) != 0 )
    {
      v12 = MiLockPageInline((INT64)v10);
      v13 = *((_QWORD *)v10 + 5);
      v14 = v12;
      if( (v13 & 0x2000000000000i64) != 0 )
      {
        _InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v12);
        break;
      }
      if( *(ULONG_PTR **)(qword_140C4E388 + 8 * ((v13 >> 39) & 0x3FF)) != &MiSystemPartition )
      {
        _InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v12);
        v8 = -1073740277;
        goto LABEL_16;
      }
      if( !MiIsPageOnBadList((INT64)v10) )
      {
        _InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v14);
        v8 = -1073740682;
        goto LABEL_16;
      }
      MiUnlinkPageFromBadList(v15);
      MiSetPfnRemovalRequested((INT64)v10, 1i64);
      *((_QWORD *)v10 + 3) |= 0x4000000000000000ui64;
      _InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v14);
      ++v7;
      ++v4;
      v11 += 6;
      v10 += 48;
      if( v7 >= a3 )
        goto LABEL_18;
    }
    v8 = -1073741585;
LABEL_16:
    if( v7 )
      MiReturnBadPagesToBadList(v4 - v7, v7);
LABEL_18:
    CurrentThread = v16;
  }
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&qword_140C50B80, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&qword_140C50B80);
  KeAbPostRelease(&qword_140C50B80);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v8;
}

Referenced by:

MmRemovePhysicalMemory