HalpTscAdvSynchLeader

VOID __fastcall HalpTscAdvSynchLeader(INT64 rcx0){
  UINT64 v2; 
  unsigned int v3; 
  INT64 v4; 
  UINT64 TimeStamp; 
  int v6; 
  unsigned int v7; 
  unsigned int i; 
  int v9; 
  int v10; 
  ULONG_PTR *Timer; 
  EVENT_DESCRIPTOR *v12; 
  ULONG_PTR *v13; 
  UINT64 v14; 
  unsigned __int64 v15; 
  UINT64 v16; 
  LPCGUID ActivityId; 
  LPCGUID RelatedActivityId; 
  UINT64 UserDataCount; 
  UINT64 a3; 
  INT64 a1; 
  INT64 a2; 
  int v23; 
  int v24; 
  int v25; 
  int v26; 
  int v27; 
  EVENT_DATA_DESCRIPTOR UserData; 
  int *v29; 
  __int64 v30; 
  int *v31; 
  __int64 v32; 
  int *v33; 
  __int64 v34; 
  int *v35; 
  __int64 v36; 
  v2 = *((unsigned int *)KeGetCurrentPrcb() + 9);
  v3 = 0;
  TimeStamp = HalpTscAdvSynchReadTimeStamp(v2);
  if( HalpTscRequestedSynchronization )
  {
    if( *(_BYTE *)(rcx0 + 34) )
    {
      HalpTscAdvSynchToLeader(*(unsigned int *)(rcx0 + 36));
    }
    else
    {
      a1 = 0i64;
      a2 = 0i64;
      v6 = *(_DWORD *)(rcx0 + 40);
      LODWORD(a3) = *((_DWORD *)KeGetCurrentPrcb() + 9);
      LODWORD(RelatedActivityId) = v6;
      HalpTscAdvSynchCalculateRemoteDeltas(&a1, &a2, &a3, v4, (INT64)ActivityId, (UINT64)RelatedActivityId);
      v7 = a3;
      if( (_DWORD)a3 != *((_DWORD *)KeGetCurrentPrcb() + 9) )
      {
        v16 = HalpTscAdvSynchReadTimeStamp((unsigned int)v2) - TimeStamp;
        LODWORD(v2) = v7;
        TimeStamp = HalpTscAdvSynchReadTimeStamp(v7) - v16;
        if( HalpTscAdjustAvailable )
          HalpTscAdjustToTarget(v7);
        else
          HalpTscAdvSynchToTarget(v7);
      }
      for( i = 0; i < *(_DWORD *)(rcx0 + 40); ++i )
      {
        if( i != *((_DWORD *)KeGetCurrentPrcb() + 9) && i != (_DWORD)a3 )
        {
          if( HalpTscAdjustAvailable )
            HalpTscAdjustToLeader(i);
          else
            HalpTscAdvSynchToLeader(i);
        }
      }
    }
  }
  a1 = 0i64;
  a2 = 0i64;
  v9 = *(_DWORD *)(rcx0 + 40);
  LODWORD(a3) = *((_DWORD *)KeGetCurrentPrcb() + 9);
  LODWORD(RelatedActivityId) = v9;
  HalpTscAdvSynchCalculateRemoteDeltas(&a1, &a2, &a3, v4, (INT64)ActivityId, (UINT64)RelatedActivityId);
  v10 = 1000000 * (HalpTscAdvSynchReadTimeStamp((unsigned int)v2) - TimeStamp) / *((_QWORD *)KeGetPcr() + 24);
  Timer = HalpFindTimer(5, 0, 0, 0, 1);
  v13 = Timer;
  HalpTscMaximumComputedSpread = a2 - a1;
  if( a2 - a1 > (unsigned __int64)(unsigned int)HalpTscMaximumCounterSyncSpread )
  {
    *((_DWORD *)Timer + 46) &= ~0x20u;
    HalpTscSynchronizationFailureFallback = 1;
    HalpTscTraceStatus(&HAL_ETW_EVENT_TIMER_SYNCH_FAILED);
  }
  else
  {
    v26 = a1;
    v25 = a2;
    v24 = a3;
    v23 = *((_DWORD *)KeGetCurrentPrcb() + 9);
    v27 = v10;
    if( HalpDiagnosticEventsRegistered )
    {
      v14 = HalpDiagnosticEventHandle;
      if( EtwEventEnabled(HalpDiagnosticEventHandle, (EVENT_DESCRIPTOR *)&HAL_ETW_EVENT_TIMER_SYNCH_SUMMARY, v12) )
      {
        *(_QWORD *)&UserData.Size = 4i64;
        UserData.Ptr = (unsigned __int64)&v23;
        v30 = 4i64;
        v29 = &v24;
        v32 = 4i64;
        v31 = &v25;
        v34 = 4i64;
        v33 = &v26;
        v36 = 4i64;
        v35 = &v27;
        LODWORD(UserDataCount) = 5;
        EtwWriteEx(
          v14,
          (EVENT_DESCRIPTOR *)&HAL_ETW_EVENT_TIMER_SYNCH_SUMMARY,
          0i64,
          0i64,
          0i64,
          0i64,
          UserDataCount,
          &UserData);
      }
    }
    *((_DWORD *)v13 + 46) |= 0x20u;
  }
  if( *(_DWORD *)(rcx0 + 40) )
  {
    do
    {
      if( v3 != *((_DWORD *)KeGetCurrentPrcb() + 9) )
      {
        v15 = (unsigned __int64)v3 << 7;
        _InterlockedExchange((volatile __int32 *)(v15 + TscRequest), 8);
        while( *(_DWORD *)(v15 + TscRequest) == 8 )
          _mm_pause();
      }
      ++v3;
    }
    while( v3 < *(_DWORD *)(rcx0 + 40) );
  }
}

Referenced by:

HalpTscSynchronizationWorker