MiRemoveBadPages

NTSTATUS __stdcall MiRemoveBadPages(INT64 a1, UINT64 a2, UINT64 a3){
  UINT64 v4; 
  _ETHREAD *CurrentThread; 
  unsigned __int64 v7; 
  NTSTATUS v8; 
  UINT64 v9; 
  _MMPFN *v10; 
  union {$8D9ED47C9F2F2CD645B633E301950288 __s0;unsigned __int64 EntireField;} *p_u4; 
  UINT8 v12; 
  unsigned __int64 EntireField; 
  unsigned __int64 v14; 
  int v15; 
  _MMPFN *v16; 
  _ETHREAD *v17; 

  v4 = a2;
  if( (MiFlags & 0x8000000) == 0 )
    return -1073741822;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v7 = 0i64;
  v17 = CurrentThread;
  v8 = 0;
  v9 = a2;
  v10 = &MmGetPfnDb()[a2];
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&stru_140C50B28 + 11, 0i64);
  if( a3 )
  {
    p_u4 = &MmGetPfnDb()[v9].u4;
    while( v4 <= 0xFFFFFFFFFi64 && (p_u4->_bf_0 & 0x4000000000000i64) != 0 )
    {
      v12 = MiLockPageInline(v10);
      EntireField = v10->u4.EntireField;
      v14 = v12;
      if( (EntireField & 0x2000000000000i64) != 0 )
      {
        _InterlockedAnd64(&v10->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v12);
        break;
      }
      if( *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * ((EntireField >> 39) & 0x3FF)) != &Irp )
      {
        _InterlockedAnd64(&v10->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v12);
        v8 = -1073740277;
        goto LABEL_16;
      }
      LOBYTE(v15) = MiIsPageOnBadList((INT64)v10);
      if( !v15 )
      {
        _InterlockedAnd64(&v10->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v14);
        v8 = -1073740682;
        goto LABEL_16;
      }
      MiUnlinkPageFromBadList(v16);
      MiSetPfnRemovalRequested((INT64)v10, 1i64);
      v10->u2._bf_0 |= 0x4000000000000000ui64;
      _InterlockedAnd64(&v10->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v14);
      ++v7;
      ++v4;
      p_u4 += 6;
      ++v10;
      if( v7 >= a3 )
        goto LABEL_18;
    }
    v8 = -1073741585;
LABEL_16:
    if( v7 )
      MiReturnBadPagesToBadList(v4 - v7, v7);
LABEL_18:
    CurrentThread = v17;
  }
  if( _InterlockedCompareExchange64((_QWORD *)&stru_140C50B28 + 11, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((_EX_PUSH_LOCK *)&stru_140C50B28 + 11);
  KeAbPostRelease((char *)&stru_140C50B28 + 88);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v8;
}

Referenced by:

MmRemovePhysicalMemory