EtwpCalculateUpdateNotification

CHAR __fastcall EtwpCalculateUpdateNotification(
        INT64 a1,
        UINT8 a2,
        UINT8 a3,
        CHAR a4,
        CHAR a5,
        CHAR a6,
        INT64 a7,
        CHAR **a8){
  unsigned __int8 v9; 
  char v10; 
  __int16 v11; 
  CHAR *v13; 
  __int64 v14; 
  UINT8 v15; 
  __int128 v16; 
  int SchematizedFilterSize; 
  CHAR *v18; 
  __int128 Source2[2]; 
  __m256i v20; 
  __int64 v21; 
  _TRACE_ENABLE_INFO EnableInfo; 
  __int64 v23; 
  int v24; 
  if( a5 )
  {
    if( a6 )
      v9 = *(_BYTE *)(a1 + 103);
    else
      v9 = *(_BYTE *)(a1 + 101);
    v10 = 0;
  }
  else if( a6 )
  {
    v9 = *(_BYTE *)(a1 + 102);
    v10 = *(_BYTE *)(a1 + 100);
  }
  else
  {
    v9 = *(_BYTE *)(a1 + 100);
    v10 = *(_BYTE *)(a1 + 102);
  }
  v11 = *(_WORD *)(a1 + 98) & 8;
  if( !v11 )
  {
    if( (a2 & a3) == 0 && (v9 & a2) == 0 )
      return 0;
    if( a4 == v9 && a5 != 2 && !v10 && !*(_BYTE *)(a1 + 101) && !*(_BYTE *)(a1 + 103) )
      goto LABEL_11;
    goto LABEL_17;
  }
  if( v9 || (_DWORD)a7 != 1 )
  {
LABEL_11:
    *a8 = 0i64;
    return 1;
  }
  if( a3 )
  {
LABEL_17:
    memset((INT64)Source2, 0i64);
    v13 = *a8;
    v14 = *(_QWORD *)(a1 + 32);
    v15 = *(_BYTE *)(a1 + 100);
    Source2[0] = *(_OWORD *)*a8;
    Source2[1] = *((_OWORD *)v13 + 1);
    v20 = *(__m256i *)(v13 + 1);
    v21 = *((_QWORD *)v13 + 8);
    v16 = *(_OWORD *)(v14 + 40);
    *(_QWORD *)((char *)Source2 + 4) = 0x100000078i64;
    *(_OWORD *)&v20.m256i_u64[1] = v16;
    SchematizedFilterSize = EtwpGetSchematizedFilterSize((_ETW_GUID_ENTRY *)v14, v15);
    if( SchematizedFilterSize )
      DWORD1(Source2[0]) = SchematizedFilterSize + 136;
    EtwpComputeRegEntryEnableInfo((_ETW_REG_ENTRY *)a1, &EnableInfo);
    if( v11 )
    {
      v23 = 0i64;
      v24 = 0;
    }
    if( !v13
      || (*((_DWORD *)v13 + 1) == DWORD1(Source2[0]) && RtlCompareMemory(v13, Source2, 0x78ui64) == 120 ? (v18 = *a8) : (*a8 = 0i64, v18 = 0i64),
          !v18) )
    {
      if( (int)EtwpBuildNotificationPacket(*(_QWORD *)(a1 + 32), Source2, *(_BYTE *)(a1 + 100), (__int64 *)a8) < 0 )
        return 0;
    }
    return 1;
  }
  return 0;
}

Referenced by:

EtwpDisallowedGuidAddition
EtwpDisallowedGuidRemoval
EtwpEnableGuid