WbAddHeapExecutedBlockToLRU

INT64 __fastcall WbAddHeapExecutedBlockToLRU(INT64 a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  UINT64 *v5; 
  _BYTE *v6; 
  _BYTE *v7; 
  INT64 *v8; 
  char v9; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 243);
  v5 = (UINT64 *)(a1 + 80);
  LODWORD(v6) = KeAbPreAcquire((PVOID)(a1 + 80), 0i64, 0i64);
  v7 = v6;
  if( _interlockedbittestandset64((volatile signed __int32 *)v5, 0i64) )
    ExfAcquirePushLockExclusiveEx(v5, v6, v5);
  if( v7 )
    v7[26] |= 1u;
  v8 = *(INT64 **)(a1 + 72);
  if( *v8 != a1 + 64 )
    __fastfail(3u);
  *(_QWORD *)a2 = a1 + 64;
  *(_QWORD *)(a2 + 8) = v8;
  *v8 = a2;
  *(_QWORD *)(a1 + 72) = a2;
  *(_DWORD *)(a2 + 16) |= 1u;
  v9 = _InterlockedExchangeAdd64((volatile signed __int64 *)v5, 0xFFFFFFFFFFFFFFFFui64);
  if( (v9 & 2) != 0 && (v9 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)v5);
  KeAbPostRelease(v5);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  return sub_14065F498(a2);
}

Referenced by:

WbAddHeapExecutedBlockToCache