MiGetPageFromSlabAllocator

NTSTATUS __stdcall MiGetPageFromSlabAllocator(INT64 a1){
  unsigned __int8 v3; 
  INT64 v4; 
  unsigned __int64 v5; 
  INT64 v6; 
  INT64 v7; 
  INT64 v8; 
  UINT8 *v9; 
  _MMPFN *v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  _QWORD *v13; 
  _QWORD *v14; 
  INT64 v15; 
  _QWORD *v16; 

  if( !(*(_QWORD *)(a1 + 32) + *(_QWORD *)(a1 + 64)) )
    return -1;
  v3 = ExAcquireSpinLockShared((INT64 *)(a1 + 16));
  v4 = *(_QWORD *)(a1 + 24);
  v5 = v3;
  if( !v4 )
    goto LABEL_9;
  LODWORD(v6) = MiGetPageFromSlabEntry(v4, a1);
  v7 = v6;
  if( v6 == -1 )
  {
    *(_QWORD *)(a1 + 24) = 0i64;
LABEL_9:
    v12 = *(_QWORD *)(a1 + 8);
    if( (v12 & 1) != 0 )
    {
      if( v12 != 1 )
      {
        v13 = (_QWORD *)(v12 ^ (a1 | 1));
        goto LABEL_13;
      }
    }
    else
    {
      v13 = *(_QWORD **)(a1 + 8);
LABEL_13:
      while( v13 )
      {
        LODWORD(v15) = MiGetPageFromSlabEntry((INT64)v13, a1);
        v7 = v15;
        if( v15 != -1 )
        {
          *(_QWORD *)(a1 + 24) = v13;
          goto LABEL_5;
        }
        v14 = (_QWORD *)v13[1];
        v16 = v13;
        if( v14 )
        {
          do
          {
            v13 = v14;
            v14 = (_QWORD *)*v14;
          }
          while( v14 );
        }
        else
        {
          while( 1 )
          {
            v13 = (_QWORD *)(v13[2] & 0xFFFFFFFFFFFFFFFCui64);
            if( !v13 || (_QWORD *)*v13 == v16 )
              break;
            v16 = v13;
          }
        }
      }
    }
    v7 = -1i64;
  }
LABEL_5:
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)(a1 + 16));
  __writecr8(v5);
  if( v7 == -1 )
  {
    LODWORD(v7) = MiGetSlabStandbyPage(a1, v8, v9);
  }
  else
  {
    v10 = &MmGetPfnDb()[v7];
    v11 = MiLockPageInline(v10);
    MiUpdateSlabPagePlaceholderState(a1, v7, 1i64, 0);
    _InterlockedAnd64(&v10->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(v11);
  }
  return v7;
}

Referenced by:

MiGetSlabPage