WbAddHeapExecutedBlockToCache

INT64 __fastcall WbAddHeapExecutedBlockToCache(INT64 a1, INT64 a2, _QWORD *a3){
  _ETHREAD *CurrentThread; 
  UINT64 *v7; 
  _BYTE *v8; 
  _BYTE *v9; 
  int v10; 
  INT64 v11; 
  int v12; 
  char v13; 
  INT64 a5; 
  UINT64 a6; 
  INT64 a4; 
  __int64 a3a; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  LODWORD(a4) = 0;
  a3a = 0i64;
  --*((_WORD *)CurrentThread + 243);
  v7 = (UINT64 *)(a1 + 48);
  LODWORD(v8) = KeAbPreAcquire((PVOID)(a1 + 48), 0i64, 0i64);
  v9 = v8;
  if( _interlockedbittestandset64((volatile signed __int32 *)v7, 0i64) )
    ExfAcquirePushLockExclusiveEx(v7, v8, v7);
  if( v9 )
    v9[26] |= 1u;
  v10 = sub_14065E484(a1, *(_QWORD *)(a2 + 48), &a3a, &a4);
  v12 = v10;
  if( v10 >= 0 )
  {
    if( a3 )
      *a3 = a3a;
  }
  else if( v10 == -1073741198 )
  {
    LODWORD(a6) = a4;
    LODWORD(a5) = 8;
    v12 = sub_14065FDF0((INT64 *)(a1 + 8), a2, v11, *(_QWORD *)(a2 + 48), a5, a6);
    if( v12 >= 0 )
    {
      v12 = sub_14065F498(a2);
      if( v12 >= 0 )
      {
        if( a3 )
          *a3 = 0i64;
        v12 = WbAddHeapExecutedBlockToLRU(a1, a2);
      }
    }
  }
  v13 = _InterlockedExchangeAdd64((volatile signed __int64 *)v7, 0xFFFFFFFFFFFFFFFFui64);
  if( (v13 & 2) != 0 && (v13 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)v7);
  KeAbPostRelease(v7);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  return(unsigned int)v12;
}

Referenced by:

WbGetHeapExecutedBlock