MiMarkHugePfnGood

INT64 __fastcall MiMarkHugePfnGood(UINT64 a1){
  _ETHREAD *CurrentThread; 
  unsigned int v4; 
  unsigned __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  INT64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  signed __int64 *v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  __int128 v14; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  v14 = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( KeGetCurrentIrql() > 1u )
    return 3221225485i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = 0;
  v5 = (a1 >> 18) & 0x3FFFF;
  v6 = 0i64;
  --*((_WORD *)CurrentThread + 243);
  ExAcquirePushLockExclusiveEx((UINT64)&qword_140C4E348, 0i64);
  v7 = MiHugePfnPartition((_QWORD *)(qword_140C4E3B0 + 8 * v5));
  v8 = v7;
  if( !v7 )
  {
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C4E348, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)&qword_140C4E348);
    KeAbPostRelease(&qword_140C4E348);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    return 3221226548i64;
  }
  MiLockDynamicMemoryExclusive(v7, (__int64)CurrentThread);
  if( (*(_DWORD *)(v8 + 4) & 1) != 0 )
  {
    MiUnlockDynamicMemoryExclusive((_MI_PARTITION *)v8, CurrentThread);
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C4E348, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)&qword_140C4E348);
    KeAbPostRelease(&qword_140C4E348);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    KeDelayExecutionThread(0, 0, (PLARGE_INTEGER)&Mi10Milliseconds);
    return 3221226548i64;
  }
  KeAcquireInStackQueuedSpinLock((UINT64 *)(v8 + 4128), &LockHandle);
  if( MiIsPageInHugePfn(a1) )
  {
    v9 = qword_140C4E3B0;
    if( (*(_QWORD *)(qword_140C4E3B0 + 8 * v5) & 0x10000000000i64) != 0 )
    {
      v6 = *(_QWORD *)(v8 + 4896);
      while( v6 )
      {
        v10 = *(_QWORD *)(v6 + 24) & 0x3FFFFi64;
        if( v5 > v10 )
        {
          v6 = *(_QWORD *)(v6 + 8);
        }
        else
        {
          if( v5 >= v10 )
            break;
          v6 = *(_QWORD *)v6;
        }
      }
      v11 = *(signed __int64 **)(v6 + 32);
      v12 = a1 & 0x3FFFF;
      *((_QWORD *)&v14 + 1) = v11;
      *(_QWORD *)&v14 = 0x40000i64;
      if( _bittest64(v11, v12) )
      {
        _bittestandreset64(v11, v12);
        if( RtlAreBitsClearEx((INT64)&v14, 0i64, 0x40000ui64) )
        {
          if( (*(_DWORD *)(v9 + 8 * v5) & 0x1C0000) == 0x100000i64 )
            MiUnlinkHugeRange(v8, v5);
          RtlAvlRemoveNode((unsigned __int64 *)(v8 + 4896), (__int64 *)v6);
          *(_QWORD *)(v9 + 8 * v5) &= ~0x10000000000ui64;
          MiInsertHugeRangeInList(v5, 130, 0i64);
          goto LABEL_29;
        }
        v13 = *(_QWORD *)(v6 + 32);
        if( _bittest64((const signed __int64 *)(v13 + 0x8000), v12) )
          _bittestandreset64((signed __int64 *)(v13 + 0x8000), v12);
      }
      v6 = 0i64;
    }
  }
  else
  {
    v4 = -1073740748;
  }
LABEL_29:
  KeReleaseInStackQueuedSpinLock(&LockHandle);
  MiUnlockDynamicMemoryExclusive((_MI_PARTITION *)v8, CurrentThread);
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C4E348, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)&qword_140C4E348);
  KeAbPostRelease(&qword_140C4E348);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  if( v6 )
  {
    ExFreePoolWithTag(*(PVOID *)(v6 + 32), 0);
    ExFreePoolWithTag((PVOID)v6, 0);
  }
  return v4;
}

Referenced by:

MiUnlinkBadPages