EtwpCovSampContextCleanup

void __fastcall EtwpCovSampContextCleanup(INT64 a1){
  _ETHREAD *CurrentThread; 
  _QWORD *v3; 
  _QWORD *v4; 
  _QWORD *v5; 
  _QWORD *i; 
  _QWORD *v7; 
  _QWORD *j; 
  __int64 v9; 
  _QWORD *v10; 
  _QWORD *v11; 
  _QWORD *v12; 
  _QWORD *k; 
  _QWORD *v14; 
  _QWORD *m; 
  __int64 v16; 
  _QWORD *v17; 
  __int64 v18; 
  void *v19; 

  EtwpCovSampProcessCleanup(a1 + 736, 0);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 664), 0i64);
  *(_QWORD *)(a1 + 672) = KeGetCurrentThread();
  v3 = *(_QWORD **)(a1 + 688);
  v4 = v3;
  while( 1 )
  {
    if( !v4 )
      goto LABEL_7;
    v5 = (_QWORD *)*v4;
    if( (*v4 & 0x8000000000000002ui64) == 0x8000000000000002ui64 )
      v5 = (_QWORD *)*v4;
    if( ((unsigned __int8)v5 & 1) != 0 )
    {
LABEL_7:
      for( i = v3 + 1; ; ++i )
      {
        if( (unsigned __int64)i >= *(_QWORD *)(a1 + 688) + 8 * ((unsigned __int64)*(unsigned int *)(a1 + 684) >> 5) )
        {
          v5 = 0i64;
          goto LABEL_12;
        }
        if( (*i & 1) == 0 )
          break;
      }
      v4 = (_QWORD *)*i;
      v3 = i;
      v5 = (_QWORD *)*i;
    }
    else
    {
      v4 = v5;
    }
LABEL_12:
    if( !v5 )
      break;
    v7 = v4;
    for( j = v3; (*j & 1) == 0; j = (_QWORD *)*j )
    {
      if( (_QWORD *)*j == v4 )
      {
        v9 = *v4;
        v4 = j;
        *j = v9;
        --*(_DWORD *)(a1 + 680);
        goto LABEL_20;
      }
    }
    v7 = 0i64;
LABEL_20:
    *v7 = 0i64;
  }
  v10 = *(_QWORD **)(a1 + 704);
  v11 = v10;
  while( 1 )
  {
    if( !v11 )
      goto LABEL_27;
    v12 = (_QWORD *)*v11;
    if( (*v11 & 0x8000000000000002ui64) == 0x8000000000000002ui64 )
      v12 = (_QWORD *)*v11;
    if( ((unsigned __int8)v12 & 1) != 0 )
    {
LABEL_27:
      for( k = v10 + 1; ; ++k )
      {
        if( (unsigned __int64)k >= *(_QWORD *)(a1 + 704) + 8 * ((unsigned __int64)*(unsigned int *)(a1 + 700) >> 5) )
        {
          v12 = 0i64;
          goto LABEL_32;
        }
        if( (*k & 1) == 0 )
          break;
      }
      v11 = (_QWORD *)*k;
      v10 = k;
      v12 = (_QWORD *)*k;
    }
    else
    {
      v11 = v12;
    }
LABEL_32:
    if( !v12 )
      break;
    v14 = v11;
    for( m = v10; (*m & 1) == 0; m = (_QWORD *)*m )
    {
      if( (_QWORD *)*m == v11 )
      {
        v16 = *v11;
        v11 = m;
        *m = v16;
        --*(_DWORD *)(a1 + 696);
        goto LABEL_40;
      }
    }
    v14 = 0i64;
LABEL_40:
    *v14 = 0i64;
  }
  v17 = (_QWORD *)(a1 + 712);
  while( (_QWORD *)*v17 != v17 )
  {
    v18 = *v17 - 72i64;
    *(_DWORD *)(v18 + 132) = 0;
    EtwpCovSampContextRemoveAndFreeModule(a1, (INT64 *)v18);
  }
  v19 = *(void **)(a1 + 688);
  if( v19 )
    ExFreePoolWithTag(v19, 0x56777445u);
  *(_QWORD *)(a1 + 672) = 0i64;
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(a1 + 664), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((_EX_PUSH_LOCK *)(a1 + 664));
  KeAbPostRelease((VOID *)(a1 + 664));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

EtwpCoverageSamplerCleanup