EtwpGetTraceGuidList

NTSTATUS __stdcall EtwpGetTraceGuidList(_ETW_SILODRIVERSTATE *SiloState, VOID *Buffer, UINT64 *OutBufferLen){
  NTSTATUS v3; 
  unsigned int v4; 
  unsigned int v5; 
  _ETW_GUID_ENTRY *v8; 
  _ETW_SILODRIVERSTATE *i; 
  _ETW_GUID_ENTRY *NextGuidEntry; 
  unsigned int v11; 
  __int64(**v12)[2]; 

  v3 = 0;
  v4 = *(_DWORD *)OutBufferLen >> 4;
  v5 = 0;
  v8 = 0i64;
  for( i = SiloState; ; SiloState = i )
  {
    NextGuidEntry = EtwpGetNextGuidEntry(SiloState, v8, EtwTraceGuidType);
    if( !NextGuidEntry )
      break;
    if( *(_OWORD *)&NextGuidEntry->Guid != PrivateLoggerNotificationGuid )
    {
      if( ++v5 > 0xFFFFFFF )
        goto LABEL_14;
      if( v5 <= v4 )
      {
        *(_GUID *)Buffer = NextGuidEntry->Guid;
        Buffer = (char *)Buffer + 16;
      }
    }
    v8 = NextGuidEntry;
  }
  v11 = 0;
  v12 = &EtwpUmglProviders;
  while( ++v5 <= 0xFFFFFFF )
  {
    if( v5 <= v4 )
    {
      *(_OWORD *)Buffer = *(_OWORD *)*v12;
      Buffer = (char *)Buffer + 16;
    }
    ++v11;
    v12 += 2;
    if( v11 >= 0xA )
      goto LABEL_15;
  }
LABEL_14:
  v3 = -2147483643;
LABEL_15:
  *(_DWORD *)OutBufferLen = 16 * v5;
  if( v3 >= 0 && v5 > v4 )
    return -1073741789;
  return v3;
}

Referenced by:

NtTraceControl