EtwpTrackDecodeGuidForSession

BOOL __fastcall EtwpTrackDecodeGuidForSession(INT64 a1, INT64 a2){
  __int64 v2; 
  volatile INT64 *v3; 
  __int64 v4; 
  bool v6; 
  _QWORD *i; 
  __int64 v8; 
  unsigned int v9; 
  char *PoolWithTag; 
  __int128 v11; 
  BOOL result; 
  __int64 v13; 
  v2 = *(_QWORD *)(a2 + 104);
  v3 = (volatile INT64 *)(a1 + 704);
  v4 = *(_QWORD *)(a2 + 32);
  v6 = 0;
  ExAcquirePushLockExclusiveEx(a1 + 704, 0i64);
  for( i = *(_QWORD **)(a1 + 128); ; i = (_QWORD *)*i )
  {
    if( !i )
    {
      v9 = *(_DWORD *)(a1 + 340) + 2048;
      if( v9 <= *(_DWORD *)(a1 + 4) && v9 <= 0x10000 )
      {
        PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 0x30ui64, 0x62777445ui64);
        if( PoolWithTag )
        {
          *(_QWORD *)PoolWithTag = *(_QWORD *)(a1 + 128);
          *(_OWORD *)(PoolWithTag + 8) = *(_OWORD *)(v2 + 34);
          v11 = *(_OWORD *)(v4 + 40);
          PoolWithTag[40] = 0;
          *(_OWORD *)(PoolWithTag + 24) = v11;
          ++*(_DWORD *)(a1 + 136);
          *(_DWORD *)(a1 + 340) += 32;
          *(_QWORD *)(a1 + 128) = PoolWithTag;
          _InterlockedOr((volatile signed __int32 *)(a1 + 836), 0x8C0u);
          v6 = 1;
        }
      }
      goto LABEL_11;
    }
    v8 = *(_QWORD *)(v2 + 34) - i[1];
    if( !v8 )
      v8 = *(_QWORD *)(v2 + 42) - i[2];
    if( !v8 )
      break;
  }
  v13 = *(_QWORD *)(v4 + 40) - i[3];
  if( !v13 )
    v13 = *(_QWORD *)(v4 + 48) - i[4];
  v6 = v13 == 0;
LABEL_11:
  if( (_InterlockedExchangeAdd64(v3, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v3);
  KeAbPostRelease((PVOID)v3);
  LOBYTE(result) = v6;
  return result;
}

Referenced by:

AddDecodeGuidToSessions
EtwpUpdateRegEntryEnableMask