WbAllocateSlots

NTSTATUS __stdcall WbAllocateSlots(INT64 a1, UINT64 a2, INT64 a3, INT64 a4){
  __int64 v4; 
  int v5; 
  _ETHREAD *CurrentThread; 
  int v7; 
  unsigned int v8; 
  _EX_PUSH_LOCK *v10; 
  _BYTE *v11; 
  signed __int64 v12; 
  unsigned int v13; 
  _BYTE *v14; 
  int v15; 
  _ETHREAD *v16; 
  _BYTE *v17; 
  _BYTE *v18; 
  char v19; 

  LODWORD(v4) = 0;
  v5 = a4;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v7 = a3;
  v8 = a2;
  --CurrentThread->Tcb.SpecialApcDisable;
  v10 = (_EX_PUSH_LOCK *)(a1 + 1072);
  v11 = KeAbPreAcquire((VOID *)(a1 + 1072), 0i64, 0i64);
  if( _InterlockedCompareExchange64(&v10->_bf_0, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(v10, v11, v10);
  v12 = 0i64;
  if( v11 )
    v11[26] |= 1u;
  v13 = v7 + 1;
  while( 1 )
  {
    if( v8 >= v13 )
    {
LABEL_10:
      v8 = -1;
    }
    else
    {
      v14 = (_BYTE *)(v8 + a1 + 44);
      while( *v14 != (_BYTE)v12 )
      {
        ++v8;
        ++v14;
        if( v8 >= v13 )
          goto LABEL_10;
      }
    }
    if( v8 == -1 )
      break;
    v15 = sub_14065FD40(a1, v8 + 1, v5 - 1);
    if( v15 == -1 )
      break;
    v8 = v15 + 1;
  }
  if( _InterlockedCompareExchange64(&v10->_bf_0, v12, 17i64) != 17 )
    ExfReleasePushLockShared(v10);
  KeAbPostRelease(v10);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  if( v8 != -1 )
  {
    v16 = (_ETHREAD *)KeGetCurrentThread();
    --v16->Tcb.SpecialApcDisable;
    v17 = KeAbPreAcquire(v10, 0i64, 0i64);
    v18 = v17;
    if( _interlockedbittestandset64((volatile signed __int32 *)v10, 0i64) )
      ExfAcquirePushLockExclusiveEx(v10, v17, v10);
    if( v18 )
      v18[26] |= 1u;
    if( (unsigned int)sub_14065FD40(a1, v8, v5) == -1 )
    {
      v4 = *(_QWORD *)(a1 + 32) + (v8 << 6);
      if( v5 )
        memset((VOID *)(a1 + v8 + 44i64), 2i64, v5 - 1);
      *(_BYTE *)(v8 + v5 - 1 + a1 + 44) = 1;
    }
    v19 = _InterlockedExchangeAdd64(&v10->_bf_0, 0xFFFFFFFFFFFFFFFFui64);
    if( (v19 & 2) != 0 && (v19 & 4) == 0 )
      ExfTryToWakePushLock(v10);
    KeAbPostRelease(v10);
    KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  }
  return v4;
}

Referenced by:

sub_14065FACC