WbReleaseLeastRecentlyUsedHeapExecutedBlocks

VOID __fastcall WbReleaseLeastRecentlyUsedHeapExecutedBlocks(INT64 a1, INT64 rdx0){
  int v2; 
  void *v3; 
  _QWORD *v5; 
  void *v6; 
  _ETHREAD *CurrentThread; 
  _BYTE *v8; 
  _BYTE *v9; 
  _BYTE *v10; 
  _BYTE *v11; 
  _QWORD *v12; 
  __int64 v13; 
  __int64 v14; 
  char v15; 
  INT64 v16; 
  char v17; 
  __int64 a2; 
  if( (int)rdx0 > 0 )
  {
    v2 = rdx0;
    v3 = (void *)(a1 + 80);
    v5 = (_QWORD *)(a1 + 64);
    v6 = (void *)(a1 + 48);
    do
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --v2;
      --*((_WORD *)CurrentThread + 243);
      LODWORD(v8) = KeAbPreAcquire(v6, 0i64, 0i64);
      v9 = v8;
      if( _interlockedbittestandset64((volatile signed __int32 *)v6, 0i64) )
        ExfAcquirePushLockExclusiveEx((UINT64 *)v6, v8, v6);
      if( v9 )
        v9[26] |= 1u;
      LODWORD(v10) = KeAbPreAcquire(v3, 0i64, 0i64);
      v11 = v10;
      if( _interlockedbittestandset64((volatile signed __int32 *)v3, 0i64) )
        ExfAcquirePushLockExclusiveEx((UINT64 *)v3, v10, v3);
      if( v11 )
        v11[26] |= 1u;
      v12 = (_QWORD *)*v5;
      if( (_QWORD *)*v5 == v5 )
      {
        v12 = 0i64;
      }
      else
      {
        if( (_QWORD *)v12[1] != v5 || (v13 = *v12, *(_QWORD **)(*v12 + 8i64) != v12) )
          __fastfail(3u);
        *v5 = v13;
        *(_QWORD *)(v13 + 8) = v5;
      }
      v14 = 0i64;
      if( v12 )
      {
        *((_DWORD *)v12 + 4) &= ~1u;
        v14 = (__int64)v12;
      }
      v15 = _InterlockedExchangeAdd64((volatile signed __int64 *)v3, 0xFFFFFFFFFFFFFFFFui64);
      if( (v15 & 2) != 0 && (v15 & 4) == 0 )
        ExfTryToWakePushLock((volatile INT64 *)v3);
      KeAbPostRelease(v3);
      if( v14 )
      {
        v16 = *(_QWORD *)(v14 + 48);
        a2 = 0i64;
        if( (int)sub_14065D374(a1 + 8, v16, 8ui64, 0xFFFFFFFFi64, &a2) >= 0 )
          sub_14065EF2C(a1, a2);
      }
      v17 = _InterlockedExchangeAdd64((volatile signed __int64 *)v6, 0xFFFFFFFFFFFFFFFFui64);
      if( (v17 & 2) != 0 && (v17 & 4) == 0 )
        ExfTryToWakePushLock((volatile INT64 *)v6);
      KeAbPostRelease(v6);
      KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
      if( !v14 )
        break;
      sub_14065EF2C(a1, v14);
    }
    while( v2 > 0 );
  }
}

Referenced by:

WbGetHeapExecutedBlock