WbGetHeapExecutedBlock

NTSTATUS __stdcall WbGetHeapExecutedBlock(UINT64 *a1, INT64 a2, INT64 **a3){
  INT64 v5; 
  _ETHREAD *CurrentThread; 
  _BYTE *v8; 
  NTSTATUS v9; 
  INT64 *v10; 
  NTSTATUS v12; 
  __int64 v13; 
  INT64 v14; 
  __int64 v15; 

  v5 = (unsigned int)(*((_DWORD *)a1 + 3) - *((_DWORD *)a1 + 14));
  v14 = 0i64;
  v15 = 0i64;
  WbReleaseLeastRecentlyUsedHeapExecutedBlocks((INT64)a1, v5);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.SpecialApcDisable;
  v8 = KeAbPreAcquire(a1 + 6, 0i64, 0i64);
  if( _InterlockedCompareExchange64((volatile signed __int64 *)a1 + 6, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx((_EX_PUSH_LOCK *)a1 + 6, v8, a1 + 6);
  if( v8 )
    v8[26] |= 1u;
  v9 = sub_14065E484((__int64)a1, *(_QWORD *)(a2 + 272), &v14, 0i64);
  if( _InterlockedCompareExchange64((volatile signed __int64 *)a1 + 6, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((_EX_PUSH_LOCK *)a1 + 6);
  KeAbPostRelease(a1 + 6);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  if( v9 == -1073741198 )
  {
    v12 = WbCreateHeapExecutedBlock((INT64)a1, a2, &v14);
    v10 = (INT64 *)v14;
    v9 = v12;
    if( v12 < 0 )
      goto LABEL_11;
    v9 = WbAddHeapExecutedBlockToCache((__int64)a1, v14, &v15);
    if( v9 < 0 )
      goto LABEL_11;
    v13 = v15;
    if( v15 )
    {
      sub_14065EF2C((_EX_PUSH_LOCK *)a1, (__int64)v10);
      v10 = (INT64 *)v13;
      v15 = 0i64;
    }
  }
  else
  {
    v10 = (INT64 *)v14;
    if( v9 < 0 )
      goto LABEL_11;
  }
  WbMoveHeapExecutedBlockToBackOfLRU((INT64)a1, v10);
  if( a3 )
  {
    *a3 = v10;
    v10 = 0i64;
  }
LABEL_11:
  sub_14065EF2C((_EX_PUSH_LOCK *)a1, (__int64)v10);
  sub_14065EF2C((_EX_PUSH_LOCK *)a1, v15);
  return v9;
}

Referenced by:

WbHeapExecuteCall