EtwpCoverageReset

_ETHREAD *__fastcall EtwpCoverageReset(__int64 a1, char a2){
  _ETHREAD *CurrentThread; 
  __int64 v5; 
  _ETHREAD *result; 
  int a2a; 
  if( *(_DWORD *)(*(_QWORD *)(a1 + 16) + 32i64) )
  {
    if( dword_140C0EF3C < KUSER_SHARED_DATA.TelemetryCoverageRound )
    {
      if( !dword_140C0EF38 )
        dword_140C0EF38 = TelemetryCoverageStringHashInternal((_BYTE *)off_140C0EF30, &a2a);
      EtwTelemetryCoverageReport((INT64)&off_140C0EF30);
    }
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    ExAcquirePushLockExclusiveEx((UINT64)&EtwpCoverageLock, 0i64);
    EtwpCoverageLockOwner = (__int64)KeGetCurrentThread();
    if( (a2 & 4) == 0 || (*(_DWORD *)(a1 + 36) & 1) != 0 )
    {
      if( (a2 & 1) != 0
        || (unsigned int)((KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24)
         - *(_DWORD *)(a1 + 24) > 0x927C0 )
      {
        *(_DWORD *)(a1 + 36) &= ~1u;
        EtwpCoverageFlushPending(a1);
        memset(*(_QWORD *)(a1 + 16) + 52i64, 0i64);
        EtwpCoverageFreeStringBuffers(a1, 1i64);
        *(_DWORD *)(*(_QWORD *)a1 + 4i64) = 0;
        **(_DWORD **)a1 = ++*(_DWORD *)(*(_QWORD *)(a1 + 16) + 24i64);
        v5 = *(_QWORD *)(a1 + 16);
        if( (*(_BYTE *)(v5 + 2) & 1) == 0 )
          KUSER_SHARED_DATA.TelemetryCoverageRound = *(_DWORD *)(v5 + 24);
        *(_DWORD *)(*(_QWORD *)(a1 + 16) + 20i64) = (KUSER_SHARED_DATA.TickCountQuad
                                                   * KUSER_SHARED_DATA.TickCountMultiplier) >> 24;
        *(_DWORD *)(*(_QWORD *)a1 + 20i64) = *(_DWORD *)(*(_QWORD *)(a1 + 16) + 20i64);
        *(_DWORD *)(*(_QWORD *)(a1 + 16) + 32i64) = 0;
      }
      else
      {
        *(_DWORD *)(a1 + 36) |= 1u;
      }
    }
  }
  result = (_ETHREAD *)KeGetCurrentThread();
  if( (_ETHREAD *)EtwpCoverageLockOwner == result )
  {
    EtwpCoverageLockOwner = 0i64;
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&EtwpCoverageLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)&EtwpCoverageLock);
    KeAbPostRelease(&EtwpCoverageLock);
    return(_ETHREAD *)KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  }
  return result;
}

Referenced by:

EtwSetProcessTelemetryCoverage
EtwpCoverageResetWorkItemCallback