EtwpUpdateGuidEnableInfo

NTSTATUS __stdcall EtwpUpdateGuidEnableInfo(
        _ETW_GUID_ENTRY *GuidEntry,
        _ETW_ENABLE_NOTIFICATION_PACKET *EnableNotificationPacket,
        UINT64 OriginalEnableFlags,
        _ETW_FILTER_INFO *FilterInfo,
        UINT8 *EnableMask){
  unsigned int IsEnabled; 
  unsigned int v9; 
  __int64 v10; 
  unsigned int v11; 
  unsigned __int8 v12; 
  unsigned __int8 *v13; 
  __int64 v14; 
  __int64 v15; 
  __int32 v16; 
  unsigned __int8 v18; 
  unsigned __int8 v19; 
  unsigned __int8 *p_Level; 
  __int64 v21; 
  __int64 v22; 
  __int32 v23; 
  unsigned __int8 v24; 
  _TRACE_ENABLE_INFO v25; 
  _TRACE_ENABLE_INFO v26; 

  IsEnabled = EnableNotificationPacket->EnableInfo.IsEnabled;
  if( IsEnabled == 1 )
  {
    GuidEntry->LastEnable._bf_b ^= (GuidEntry->LastEnable._bf_b ^ LOBYTE(EnableNotificationPacket->LegacyProviderEnabled)) & 1;
    GuidEntry->LastEnable._bf_b = GuidEntry->LastEnable._bf_b & 1 | (2
                                                                   * EnableNotificationPacket->LegacyEnableContext.InternalFlag);
    GuidEntry->LastEnable.LoggerId = EnableNotificationPacket->LegacyEnableContext.LoggerId;
    GuidEntry->LastEnable.Level = EnableNotificationPacket->LegacyEnableContext.Level;
    GuidEntry->LastEnable.EnableFlags.QuadPart = OriginalEnableFlags;
  }
  else if( !IsEnabled && GuidEntry->LastEnable.LoggerId == EnableNotificationPacket->LegacyEnableContext.LoggerId )
  {
    GuidEntry->LastEnable._bf_b &= ~1u;
  }
  v9 = 0;
  v10 = 8i64;
  do
  {
    if( GuidEntry->EnableInfo[v9].IsEnabled
      && GuidEntry->EnableInfo[v9].LoggerId == EnableNotificationPacket->EnableInfo.LoggerId )
    {
      *(_QWORD *)&v26.IsEnabled = 0i64;
      v19 = 0;
      p_Level = &GuidEntry->EnableInfo[0].Level;
      v21 = 0i64;
      v22 = -1i64;
      v26.Reserved2 = 0;
      v23 = 0;
      v26.MatchAllKeyword = -1i64;
      GuidEntry->EnableInfo[v9] = EnableNotificationPacket->EnableInfo;
      do
      {
        if( *((_DWORD *)p_Level - 1) )
        {
          v24 = v19;
          v26.IsEnabled = 1;
          if( v19 <= *p_Level )
            v24 = *p_Level;
          v22 &= *(_QWORD *)(p_Level + 20);
          v21 |= *(_QWORD *)(p_Level + 12);
          v19 = v24;
          v23 |= *((_DWORD *)p_Level + 1);
          v26.MatchAllKeyword = v22;
        }
        p_Level += 32;
        --v10;
      }
      while( v10 );
      v26.Level = v19;
      v26.EnableProperty = v23;
      *EnableMask = 1 << v9;
      v26.MatchAnyKeyword = v21;
      GuidEntry->ProviderEnableInfo = v26;
      EtwpUpdateFilterData(
        GuidEntry,
        v9,
        EnableNotificationPacket,
        EnableNotificationPacket->EnableInfo.IsEnabled == 0,
        FilterInfo);
      if( !EnableNotificationPacket->EnableInfo.IsEnabled )
        EtwpUnreferenceGuidEntry(GuidEntry);
      return 0;
    }
    ++v9;
  }
  while( v9 < 8 );
  if( EnableNotificationPacket->EnableInfo.IsEnabled )
  {
    v11 = 0;
    while( GuidEntry->EnableInfo[v11].IsEnabled )
    {
      if( ++v11 >= 8 )
        return -1073741670;
    }
    *(_QWORD *)&v25.IsEnabled = 0i64;
    v12 = 0;
    v13 = &GuidEntry->EnableInfo[0].Level;
    v14 = 0i64;
    v15 = -1i64;
    v25.Reserved2 = 0;
    v16 = 0;
    v25.MatchAllKeyword = -1i64;
    GuidEntry->EnableInfo[v11] = EnableNotificationPacket->EnableInfo;
    do
    {
      if( *((_DWORD *)v13 - 1) )
      {
        v18 = v12;
        v25.IsEnabled = 1;
        if( v12 <= *v13 )
          v18 = *v13;
        v15 &= *(_QWORD *)(v13 + 20);
        v14 |= *(_QWORD *)(v13 + 12);
        v12 = v18;
        v16 |= *((_DWORD *)v13 + 1);
        v25.MatchAllKeyword = v15;
      }
      v13 += 32;
      --v10;
    }
    while( v10 );
    v25.Level = v12;
    v25.EnableProperty = v16;
    *EnableMask = 1 << v11;
    v25.MatchAnyKeyword = v14;
    GuidEntry->ProviderEnableInfo = v25;
    EtwpUpdateFilterData(
      GuidEntry,
      v11,
      EnableNotificationPacket,
      EnableNotificationPacket->EnableInfo.IsEnabled == 0,
      FilterInfo);
    EtwpReferenceGuidEntry(GuidEntry);
    return 0;
  }
  return -1073741275;
}

Referenced by:

EtwpEnableGuid