MiGetSlabStandbyListWorker

NTSTATUS __stdcall MiGetSlabStandbyListWorker(INT64 a1, INT64 a2, INT64 *a3){
  __int64 v4; 
  unsigned __int64 v6; 
  unsigned __int8 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  int v10; 
  int v11; 
  __int64 v12; 
  NTSTATUS result; 

  v4 = *(_QWORD *)a2;
  if( (*(_BYTE *)(a2 + 8) & 1) != 0 )
  {
    if( !v4 )
      return 0;
    v4 ^= a2;
  }
  if( v4 )
  {
    v6 = 0i64;
    v7 = ExAcquireSpinLockShared((INT64 *)(a2 + 16));
    v8 = *(_QWORD *)a2;
    v9 = v7;
    if( (*(_BYTE *)(a2 + 8) & 1) != 0 && v8 )
      v8 ^= a2;
    v10 = *(_BYTE *)(a2 + 8) & 1;
    if( v8 )
    {
      do
      {
        v11 = MiCompareSlabEntry(a3 + 1, v8);
        if( v11 >= 0 )
        {
          if( v11 <= 0 )
            break;
          v12 = *(_QWORD *)(v8 + 8);
        }
        else
        {
          v12 = *(_QWORD *)v8;
        }
        if( v10 && v12 )
          v8 ^= v12;
        else
          v8 = v12;
      }
      while( v8 );
      if( v8 )
      {
        v6 = v8;
        _InterlockedIncrement((volatile signed __int32 *)(v8 + 136));
        if( (unsigned int)(*(_DWORD *)(v8 + 136) + *(_DWORD *)(v8 + 132)) >= 0x200 )
          _InterlockedOr((volatile signed __int32 *)(a2 + 56), 1u);
      }
    }
    ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)(a2 + 16));
    __writecr8(v9);
    if( v6 )
    {
      MI_SET_SLAB_STANDBY_PAGE_SLAB_ENTRY((_MMPFN *)*a3, v6);
      result = 1;
      a3[2] = a2 + 64;
      return result;
    }
  }
  return 0;
}

Referenced by:

No references.