EtwpGetTrackingLockSlotForThread

signed __int64 __fastcall EtwpGetTrackingLockSlotForThread(__int64 a1, int a2){
  _ETHREAD *CurrentThread; 
  signed __int64 ReservedForSynchTracking; 
  int v6; 
  VOID **PoolWithTag; 
  signed __int64 v8; 
  signed __int64 v10; 
  int v11; 
  int v12; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( (CurrentThread->CrossThreadFlags & 1) != 0 )
    return 0i64;
  ReservedForSynchTracking = (signed __int64)CurrentThread->ReservedForSynchTracking;
  v6 = EtwpEthreadSyncTrackingSequence;
  if( !ReservedForSynchTracking )
  {
    PoolWithTag = ExAllocatePoolWithTag(0x204ui64, 0x200ui64, 1918133586i64);
    v8 = (signed __int64)PoolWithTag;
    if( PoolWithTag )
    {
      memset(PoolWithTag, 0i64, 0x200u);
      *(_QWORD *)(v8 + 16) = a1;
      *(_DWORD *)(v8 + 28) = a2;
      *(_DWORD *)(v8 + 40) = v6;
      ReservedForSynchTracking = _InterlockedCompareExchange64(
                                   (volatile signed __int64 *)&CurrentThread->ReservedForSynchTracking,
                                   v8,
                                   0i64);
      if( !ReservedForSynchTracking )
        return v8;
      ExFreePoolWithTag((PVOID)v8, 0);
      goto LABEL_7;
    }
    return 0i64;
  }
LABEL_7:
  v10 = 0i64;
  v11 = 0;
  while( 1 )
  {
    v12 = *(_DWORD *)(ReservedForSynchTracking + 28);
    if( v12 == a2
      && *(_QWORD *)(ReservedForSynchTracking + 16) == a1
      && *(_DWORD *)(ReservedForSynchTracking + 40) == v6 )
    {
      return ReservedForSynchTracking;
    }
    if( !v10 )
    {
      if( v12 )
      {
        if( *(_DWORD *)(ReservedForSynchTracking + 40) < v6 )
        {
          v10 = ReservedForSynchTracking;
LABEL_18:
          ReservedForSynchTracking = v10;
          if( v10 )
          {
            *(_QWORD *)(v10 + 16) = a1;
            *(_DWORD *)(v10 + 28) = a2;
            *(_QWORD *)(v10 + 32) = 0i64;
            *(_QWORD *)v10 = 0i64;
            *(_QWORD *)(v10 + 8) = 0i64;
            *(_DWORD *)(v10 + 24) = 0;
            *(_DWORD *)(v10 + 40) = v6;
            *(_DWORD *)(v10 + 44) = 0;
          }
          return ReservedForSynchTracking;
        }
      }
      else
      {
        v10 = ReservedForSynchTracking;
      }
    }
    ReservedForSynchTracking += 64i64;
    if( (unsigned int)++v11 >= 8 )
      goto LABEL_18;
  }
}

Referenced by:

PerfLogExecutiveResourceAcquire
PerfLogExecutiveResourceRelease
PerfLogExecutiveResourceSetOwnerPointer
PerfLogExecutiveResourceWait