MiFreePageToSlabAllocator

INT64 __fastcall MiFreePageToSlabAllocator(INT64 rcx0, INT64 a2, INT64 a3){
  INT64 v3; 
  unsigned int v4; 
  KIRQL v8; 
  INT64 v9; 
  unsigned __int64 v10; 
  int v11; 
  int v12; 
  INT64 v13; 
  INT64 a1; 
  v3 = *(_QWORD *)a2;
  v4 = 0;
  if( (*(_BYTE *)(a2 + 8) & 1) != 0 )
  {
    if( !v3 )
      return 0i64;
    v3 ^= a2;
  }
  if( !v3 )
    return 0i64;
  a1 = (a3 - (__int64)MmGetPfnDb()) / 48;
  v8 = ExAcquireSpinLockShared((PEX_SPIN_LOCK)(a2 + 16));
  v9 = *(_QWORD *)a2;
  v10 = v8;
  if( (*(_BYTE *)(a2 + 8) & 1) != 0 )
  {
    if( v9 )
      v9 ^= a2;
    else
      v9 = 0i64;
  }
  v11 = *(_BYTE *)(a2 + 8) & 1;
  if( v9 )
  {
    do
    {
      v12 = MiCompareSlabEntry(&a1, v9);
      if( v12 >= 0 )
      {
        if( v12 <= 0 )
          break;
        v13 = *(_QWORD *)(v9 + 8);
      }
      else
      {
        v13 = *(_QWORD *)v9;
      }
      if( v11 && v13 )
        v9 ^= v13;
      else
        v9 = v13;
    }
    while( v9 );
    if( v9 )
    {
      MiReInitializeFreeSlabPfn(a3, a2);
      MiUpdateSlabPagePlaceholderState(a2, a1, 1i64, 1i64);
      MiFreePageToSlabEntry(a3, v9, a2);
    }
  }
  ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)(a2 + 16));
  __writecr8(v10);
  LOBYTE(v4) = v9 != 0;
  return v4;
}

Referenced by:

No references.