WbMoveHeapExecutedBlockToBackOfLRU

NTSTATUS __stdcall WbMoveHeapExecutedBlockToBackOfLRU(INT64 a1, INT64 *a2){
  _ETHREAD *CurrentThread; 
  _EX_PUSH_LOCK *v5; 
  _BYTE *v6; 
  _BYTE *v7; 
  INT64 v8; 
  INT64 **v9; 
  INT64 **v10; 
  char v11; 
  NTSTATUS result; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.SpecialApcDisable;
  v5 = (_EX_PUSH_LOCK *)(a1 + 80);
  v6 = KeAbPreAcquire((VOID *)(a1 + 80), 0i64, 0i64);
  v7 = v6;
  if( _interlockedbittestandset64((volatile signed __int32 *)v5, 0i64) )
    ExfAcquirePushLockExclusiveEx(v5, v6, v5);
  if( v7 )
    v7[26] |= 1u;
  if( (a2[2] & 1) != 0 )
  {
    v8 = *a2;
    if( *(INT64 **)(*a2 + 8) != a2
      || (v9 = (INT64 **)a2[1], *v9 != a2)
      || (*v9 = (INT64 *)v8, *(_QWORD *)(v8 + 8) = v9, v10 = *(INT64 ***)(a1 + 72), *v10 != (INT64 *)(a1 + 64)) )
    {
      __fastfail(3u);
    }
    *a2 = a1 + 64;
    a2[1] = (INT64)v10;
    *v10 = a2;
    *(_QWORD *)(a1 + 72) = a2;
  }
  v11 = _InterlockedExchangeAdd64(&v5->_bf_0, 0xFFFFFFFFFFFFFFFFui64);
  if( (v11 & 2) != 0 && (v11 & 4) == 0 )
    ExfTryToWakePushLock(v5);
  KeAbPostRelease(v5);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  return result;
}

Referenced by:

WbGetHeapExecutedBlock