EtwpUpdateGlobalGroupMasks

NTSTATUS __stdcall EtwpUpdateGlobalGroupMasks(INT64 LoggerId, UINT64 a2, UINT64 a3){
  __int64 v3; 
  __int64 v4; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  INT64 v9; 
  PERFINFO_GROUPMASK *v10; 
  __int64 v11; 
  _DWORD *v12; 
  _EJOB *v13; 
  __int128 v14; 
  _EJOB *NextSilo; 
  INT64 v16; 
  PERFINFO_GROUPMASK *v17; 
  __int64 v18; 
  __m128i si128; 
  __int64 v20; 
  __int64 v21; 
  __m128i v22; 
  __m128i v23; 
  int v24; 
  _ETW_SILODRIVERSTATE *EtwSiloState; 
  _EJOB *v27; 
  __int64 v28; 
  signed __int64 v29; 
  PERFINFO_GROUPMASK *v30; 
  int v31; 
  PERFINFO_GROUPMASK DesiredFlags[4]; 
  __int128 v33; 
  PERFINFO_GROUPMASK FlagsToEnable[4]; 
  __int128 v35; 
  int v36[4]; 
  __int128 v37; 

  v3 = (unsigned int)a3;
  v4 = (unsigned int)a2;
  *(_OWORD *)FlagsToEnable = 0i64;
  v35 = 0i64;
  *(_OWORD *)v36 = 0i64;
  v37 = 0i64;
  KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 2368, 0, 0, 0, 0i64);
  v6 = 8i64;
  if( (unsigned int)v3 < 8
    && ((unsigned int)v4 >= *(_DWORD *)(LoggerId + 16) ? (LOBYTE(v7) = 1) : (v7 = *(_QWORD *)(*(_QWORD *)(LoggerId + 456)
                                                                                            + 8 * v4)),
        (v7 & 1) != 0) )
  {
    v24 = -2147483611;
  }
  else
  {
    v8 = 10i64;
    v9 = LoggerId - (_QWORD)DesiredFlags + 4260;
    *(_OWORD *)DesiredFlags = 0i64;
    v33 = 0i64;
    do
    {
      v10 = DesiredFlags;
      v11 = 8i64;
      do
      {
        *v10 |= *(PERFINFO_GROUPMASK *)((char *)v10 + v9);
        ++v10;
        --v11;
      }
      while( v11 );
      v9 += 32i64;
      --v8;
    }
    while( v8 );
    v12 = (_DWORD *)(LoggerId + 4228);
    v13 = 0i64;
    v14 = v33;
    *(_OWORD *)(LoggerId + 4228) = *(_OWORD *)DesiredFlags;
    *(_OWORD *)(LoggerId + 4244) = v14;
    while( 1 )
    {
      NextSilo = PspGetNextSilo(v13, 1u);
      if( !NextSilo )
        break;
      EtwSiloState = PsGetServerSiloGlobals(NextSilo)->EtwSiloState;
      if( EtwSiloState )
      {
        v28 = 8i64;
        v29 = (char *)EtwSiloState - (char *)DesiredFlags;
        v30 = DesiredFlags;
        do
        {
          *v30 |= *(PERFINFO_GROUPMASK *)((char *)v30 + v29 + 4228);
          ++v30;
          --v28;
        }
        while( v28 );
      }
      v13 = v27;
    }
    v16 = EtwpHostSiloState - (_QWORD)DesiredFlags;
    v17 = DesiredFlags;
    v18 = 8i64;
    do
    {
      *v17 |= *(PERFINFO_GROUPMASK *)((char *)v17 + v16 + 4228);
      ++v17;
      --v18;
    }
    while( v18 );
    si128 = _mm_load_si128((const __m128i *)&_xmm_ffffffffffffffffffffffffffffffff);
    v20 = 0i64;
    v21 = 2i64;
    do
    {
      v22 = _mm_loadu_si128((const __m128i *)((char *)&PerfGlobalGroupMask + v20 * 4));
      v23 = _mm_loadu_si128((const __m128i *)&DesiredFlags[v20]);
      v20 += 4i64;
      *(__m128i *)&v36[v20 - 4] = _mm_and_si128(_mm_andnot_si128(v23, si128), v22);
      *(__m128i *)&FlagsToEnable[v20 - 4] = _mm_and_si128(_mm_andnot_si128(v22, si128), v23);
      --v21;
    }
    while( v21 );
    EtwpDisableKernelTrace(DesiredFlags, v36, (UINT64 *)LoggerId, (unsigned int)v4);
    v24 = EtwpEnableKernelTrace(DesiredFlags, FlagsToEnable, LoggerId);
    if( v24 < 0 )
    {
      do
      {
        v31 = ~*(_DWORD *)((char *)v12 + (_QWORD)FlagsToEnable - LoggerId - 4228);
        *v12 &= v31;
        v12[8 * v3 + 8] &= v31;
        *(_DWORD *)((char *)v12++ + (_QWORD)DesiredFlags - LoggerId - 4228) &= v31;
        --v6;
      }
      while( v6 );
    }
    *(_OWORD *)&PerfGlobalGroupMask = *(_OWORD *)DesiredFlags;
    xmmword_140CFB490 = v33;
    if( (DesiredFlags[1] & 4) != 0 )
      _interlockedbittestandset(&KiCpuTracingFlags, 0);
    else
      _interlockedbittestandreset(&KiCpuTracingFlags, 0);
  }
  KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 2368), 0);
  return v24;
}

Referenced by:

EtwDereferenceSpinLockCounters
EtwReferenceSpinLockCounters
EtwpCoverageSamplerStart
EtwpCoverageSamplerStop
EtwpUpdateGroupMasks
EtwpUpdateKernelGroupsWork