MiMarkHugePfnGood

NTSTATUS __stdcall MiMarkHugePfnGood(UINT64 a1){
  _ETHREAD *CurrentThread; 
  NTSTATUS v4; 
  UINT64 v5; 
  INT64 v6; 
  _MI_PARTITION *v7; 
  INT64 v8; 
  int v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 *v12; 
  unsigned __int64 v13; 
  char v14; 
  __int64 v15; 
  _RTL_BITMAP_EX BitMapHeader; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  BitMapHeader = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( KeGetCurrentIrql() > 1u )
    return -1073741811;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = 0;
  v5 = (a1 >> 18) & 0x3FFFF;
  v6 = 0i64;
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&stru_140C4DB30 + 259, 0i64);
  v7 = (_MI_PARTITION *)MiHugePfnPartition((_QWORD *)(*(&stru_140C4DB30 + 272) + 8 * v5));
  v8 = (INT64)v7;
  if( !v7 )
  {
    if( (_InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 259, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C4DB30 + 259);
    KeAbPostRelease((char *)&stru_140C4DB30 + 2072);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    return -1073740748;
  }
  MiLockDynamicMemoryExclusive(v7, CurrentThread);
  if( (*(_DWORD *)(v8 + 4) & 1) != 0 )
  {
    MiUnlockDynamicMemoryExclusive((_MI_PARTITION *)v8, CurrentThread);
    if( (_InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 259, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C4DB30 + 259);
    KeAbPostRelease((char *)&stru_140C4DB30 + 2072);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    KeDelayExecutionThread(0, 0, (_LARGE_INTEGER *)&Mi10Milliseconds);
    return -1073740748;
  }
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(v8 + 4128), &LockHandle);
  LOBYTE(v9) = MiIsPageInHugePfn(a1);
  if( v9 )
  {
    v10 = *(&stru_140C4DB30 + 272);
    if( (*(_QWORD *)(*(&stru_140C4DB30 + 272) + 8 * v5) & 0x10000000000i64) != 0 )
    {
      v6 = *(_QWORD *)(v8 + 4896);
      while( v6 )
      {
        v11 = *(_QWORD *)(v6 + 24) & 0x3FFFFi64;
        if( v5 > v11 )
        {
          v6 = *(_QWORD *)(v6 + 8);
        }
        else
        {
          if( v5 >= v11 )
            break;
          v6 = *(_QWORD *)v6;
        }
      }
      v12 = *(unsigned __int64 **)(v6 + 32);
      v13 = a1 & 0x3FFFF;
      BitMapHeader.Buffer = v12;
      BitMapHeader.SizeOfBitMap = 0x40000i64;
      if( _bittest64((const signed __int64 *)v12, v13) )
      {
        _bittestandreset64((signed __int64 *)v12, v13);
        RtlAreBitsClearEx(&BitMapHeader, 0i64, 0x40000ui64);
        if( v14 )
        {
          if( (*(_DWORD *)(v10 + 8 * v5) & 0x1C0000) == 0x100000i64 )
            MiUnlinkHugeRange(v8, v5);
          RtlAvlRemoveNode((UINT64 *)(v8 + 4896), (INT64 *)v6);
          *(_QWORD *)(v10 + 8 * v5) &= ~0x10000000000ui64;
          MiInsertHugeRangeInList(v5, 130, 0i64);
          goto LABEL_29;
        }
        v15 = *(_QWORD *)(v6 + 32);
        if( _bittest64((const signed __int64 *)(v15 + 0x8000), v13) )
          _bittestandreset64((signed __int64 *)(v15 + 0x8000), v13);
      }
      v6 = 0i64;
    }
  }
  else
  {
    v4 = -1073740748;
  }
LABEL_29:
  KeReleaseInStackQueuedSpinLock(&LockHandle);
  MiUnlockDynamicMemoryExclusive((_MI_PARTITION *)v8, CurrentThread);
  if( (_InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 259, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C4DB30 + 259);
  KeAbPostRelease((char *)&stru_140C4DB30 + 2072);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  if( v6 )
  {
    ExFreePoolWithTag(*(PVOID *)(v6 + 32), 0);
    ExFreePoolWithTag((PVOID)v6, 0);
  }
  return v4;
}

Referenced by:

MiUnlinkBadPages