EtwpCoverageRecord

VOID __fastcall EtwpCoverageRecord(INT64 **a1, INT64 a2){
  int v4; 
  int v5; 
  unsigned __int64 v6; 
  _ETHREAD *CurrentThread; 
  unsigned int v8; 
  unsigned int v9; 
  INT64 v10; 
  INT64 *v11; 
  UINT64 *Internal; 
  int v13; 
  INT64 v14; 
  _KTIMER2 *v15; 
  char v16; 
  WCHAR **v17; 
  VOID *v18; 
  UINT8 v19; 
  int v20; 
  INT64 *v21; 
  const CHAR *v22; 
  INT64 *v23; 
  const CHAR *v24; 
  int v25; 
  CHAR v26; 
  INT64 v27; 
  INT64 a7; 
  unsigned int a7a; 
  INT64 a8; 
  INT64 a9; 
  int v32; 
  int v33; 
  int v34; 
  int v35; 
  int v36; 
  int v37; 
  int v38; 
  int v39; 
  int v40; 
  _EXT_SET_PARAMETERS_V0 Parameters; 
  struct _EVENT_DATA_DESCRIPTOR v42; 
  int *v43; 
  __int64 v44; 
  int *v45; 
  __int64 v46; 
  int *v47; 
  __int64 v48; 
  int *v49; 
  __int64 v50; 
  int *v51; 
  __int64 v52; 
  int *v53; 
  __int64 v54; 
  char v55[16]; 
  struct _EVENT_DATA_DESCRIPTOR v56; 
  __int64 v57; 
  __int64 v58; 
  int *v59; 
  __int64 v60; 
  int *v61; 
  __int64 v62; 
  int *v63; 
  __int64 v64; 
  char v65[16]; 
  LODWORD(a9) = 0;
  v4 = 0;
  v5 = 0;
  LODWORD(a7) = 0;
  v6 = (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24;
  a8 = v6;
  if( (unsigned int)EtwpCoverageValidateCP((INT64 *)a2) )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    ExAcquirePushLockExclusiveEx((UINT64)&EtwpCoverageLock, 0i64);
    v8 = *(_DWORD *)(a2 + 12);
    EtwpCoverageLockOwner = (__int64)KeGetCurrentThread();
    v9 = *((_DWORD *)a1[2] + 6);
    if( v8 >= v9 )
    {
      v4 = 1;
    }
    else
    {
      v10 = *(unsigned int *)(a2 + 8);
      *(_DWORD *)(a2 + 12) = v9;
      v11 = a1[2];
      Internal = TelemetryCoverageTableLocateInternal((UINT64 *)v11, v10);
      if( *(_DWORD *)Internal == v13 )
      {
        v5 = a9;
        v4 = 1;
      }
      else if( *((_DWORD *)v11 + 8) >= *((_DWORD *)a1 + 8) )
      {
        _InterlockedIncrement((volatile signed __int32 *)*a1 + 1);
        v5 = 0;
      }
      else
      {
        v5 = EtwpCoverageAddToStringBuffer((INT64)a1[5], *(const CHAR **)a2, 0i64);
        if( v5 )
          goto LABEL_6;
        EtwpCoverageFlushPending((INT64)a1);
        EtwpCoverageEnsureStringBuffer((INT64)a1, v17, v18, v19, v26, v27, a7, a8, a9);
        if( v20 >= 0 )
        {
          v5 = EtwpCoverageAddToStringBuffer((INT64)a1[5], *(const CHAR **)a2, a7a);
LABEL_6:
          *(_DWORD *)Internal = *(_DWORD *)(a2 + 8);
          ++*((_DWORD *)a1 + 16);
          ++*((_DWORD *)a1[2] + 8);
          if( *((_DWORD *)a1 + 16) == 1 )
          {
            v14 = -10000i64 * *((unsigned int *)a1 + 7);
            v15 = (_KTIMER2 *)(*a1 + 30);
            *(_QWORD *)&Parameters.Version = 0i64;
            Parameters.NoWakeTolerance = -1i64;
            KeSetTimer2(v15, v14, 0i64, &Parameters);
          }
          goto LABEL_9;
        }
        *(_DWORD *)(a2 + 12) = v8;
        _InterlockedIncrement((volatile signed __int32 *)*a1 + 1);
      }
    }
LABEL_9:
    LODWORD(v6) = a8;
  }
  if( (struct _KTHREAD *)EtwpCoverageLockOwner == KeGetCurrentThread() )
  {
    EtwpCoverageLockOwner = 0i64;
    v16 = _InterlockedExchangeAdd64((volatile signed __int64 *)&EtwpCoverageLock, 0xFFFFFFFFFFFFFFFFui64);
    if( (v16 & 2) != 0 && (v16 & 4) == 0 )
      ExfTryToWakePushLock((volatile INT64 *)&EtwpCoverageLock);
    KeAbPostRelease(&EtwpCoverageLock);
    KeLeaveCriticalRegion();
  }
  if( !v4 && v5 && (unsigned int)dword_140C02BE8 > 5 && tlgKeywordOn((__int64)&dword_140C02BE8, 2i64) )
  {
    v21 = *a1;
    v22 = *(const CHAR **)a2;
    HIDWORD(a9) = *(_DWORD *)*a1;
    v57 = (__int64)&a9 + 4;
    v58 = 4i64;
    v32 = *((_DWORD *)v21 + 1);
    v59 = &v32;
    v60 = 4i64;
    v33 = v6 - *((_DWORD *)v21 + 4);
    v61 = &v33;
    v62 = 4i64;
    v34 = v6 - *((_DWORD *)v21 + 5);
    v63 = &v34;
    v64 = 4i64;
    tlgCreate1Sz_char((__int64)v65, v22);
    tlgWriteTransfer_EtwWriteTransfer(
      (__int64)&dword_140C02BE8,
      (unsigned __int8 *)byte_14002B711,
      0i64,
      0i64,
      7u,
      &v56);
  }
  if( EtwpCoverageCoreTracingEnabled && (unsigned int)dword_140C02BE8 > 5 )
  {
    if( tlgKeywordOn((__int64)&dword_140C02BE8, 1i64) )
    {
      v23 = *a1;
      v24 = *(const CHAR **)a2;
      v35 = *(_DWORD *)*a1;
      v43 = &v35;
      v44 = 4i64;
      v36 = *((_DWORD *)v23 + 1);
      v45 = &v36;
      v46 = 4i64;
      v37 = v6 - *((_DWORD *)v23 + 4);
      v47 = &v37;
      v48 = 4i64;
      v25 = v6 - *((_DWORD *)v23 + 5);
      v49 = &v38;
      v51 = &v39;
      v53 = &v40;
      v38 = v25;
      v50 = 4i64;
      v39 = v5;
      v52 = 4i64;
      v40 = v4;
      v54 = 4i64;
      tlgCreate1Sz_char((__int64)v55, v24);
      tlgWriteTransfer_EtwWriteTransfer(
        (__int64)&dword_140C02BE8,
        (unsigned __int8 *)byte_14002B69D,
        0i64,
        0i64,
        9u,
        &v42);
    }
  }
}

Referenced by:

EtwSetProcessTelemetryCoverage
EtwTelemetryCoverageReport
EtwpCoverageHighIrqlCPWorkItemCallback