HalpTscAdvSynchToTarget

NTSTATUS __stdcall HalpTscAdvSynchToTarget(UINT64 a1){
  unsigned int v1; 
  INT64 v2; 
  __int64 v3; 
  unsigned int i; 
  __int64 v5; 
  INT64 v6; 
  __int64 v7; 
  unsigned int v8; 
  unsigned int v9; 
  NTSTATUS result; 

  v1 = a1;
  HalpTscAdvSynchSkewCounter(0i64);
  v2 = 0i64;
  v3 = 0x7FFFFFFFFFFFFFFFi64;
  for( i = 0; i < HalpTscSyncRecalculateSkews; ++i )
  {
    v5 = v3;
    v6 = HalpTscAdvSynchCalculateRemoteDelta(v1, (unsigned int)HalpTscRequestedIterations, 0i64);
    v7 = 100i64;
    do
    {
      HalpTscAdvSynchSkewCounter(0i64);
      --v7;
    }
    while( v7 );
    v2 = HalpTscAdvSynchCalculateRemoteDelta(v1, (unsigned int)HalpTscRequestedIterations, 0i64);
    v3 = (v2 - v6) / 100;
    if( v3 >= v5 )
      v3 = v5;
  }
  v8 = 0;
  v9 = 0;
  *(_DWORD *)(qword_140C4A3E0 + 4i64 * KeGetCurrentPrcb()->Number) = v3;
  do
  {
    if( !v8 )
      HalpTscAdvSynchSkewCounter(v3 + v2);
    v2 = HalpTscAdvSynchCalculateRemoteDelta(v1, (unsigned int)HalpTscRequestedIterations, 0i64);
    if( !v8 )
      HalpTscTraceProcessorSynchronization(v1, KeGetCurrentPrcb()->Number, v2);
    ++v8;
    if( (unsigned __int64)(v2 + 24) > 0x30 )
      v8 = 0;
    ++v9;
  }
  while( v9 < 0x32 && v8 < 2 );
  result = qword_140C4A3D8;
  *(_DWORD *)(qword_140C4A3D8 + 4i64 * KeGetCurrentPrcb()->Number) = v9;
  return result;
}

Referenced by:

HalpTscAdvSynchLeader