WbAddHeapExecutedBlockToLRU

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

  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;
  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(&v5->_bf_0, 0xFFFFFFFFFFFFFFFFui64);
  if( (v9 & 2) != 0 && (v9 & 4) == 0 )
    ExfTryToWakePushLock(v5);
  KeAbPostRelease(v5);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  return sub_14065F498(a2);
}

Referenced by:

WbAddHeapExecutedBlockToCache