EtwpEnumerateTraceGuids

NTSTATUS __stdcall EtwpEnumerateTraceGuids(_ETW_SILODRIVERSTATE *SiloState, PVOID Buffer, UINT64 *OutBufferLen){
  NTSTATUS v4; 
  unsigned int v5; 
  _ETW_SILODRIVERSTATE *v7; 
  unsigned int v8; 
  _ETW_GUID_ENTRY *v9; 
  _ETW_GUID_ENTRY *NextGuidEntry; 
  unsigned __int16 *UserModeGlobalLogger; 
  unsigned int v12; 
  __int64(**v13)[2]; 
  char *v14; 
  __int64 v15; 
  int v16; 

  v4 = 0;
  v5 = 0;
  v7 = SiloState;
  v8 = *(_DWORD *)OutBufferLen / 0x24u;
  v9 = 0i64;
  while( 1 )
  {
    NextGuidEntry = EtwpGetNextGuidEntry(SiloState, v9, EtwTraceGuidType);
    if( !NextGuidEntry )
      break;
    if( ++v5 > 0x71C71C7 )
    {
LABEL_17:
      v4 = -2147483643;
      goto LABEL_18;
    }
    if( v5 <= v8 )
    {
      *(_GUID *)Buffer = NextGuidEntry->Guid;
      *((_DWORD *)Buffer + 7) = NextGuidEntry->LastEnable.EnableFlags.anonymous_0.LowPart;
      *((_DWORD *)Buffer + 5) = NextGuidEntry->LastEnable.LoggerId;
      *((_DWORD *)Buffer + 6) = NextGuidEntry->LastEnable.Level;
      *((_BYTE *)Buffer + 32) = NextGuidEntry->LastEnable._bf_b & 1;
      Buffer = (char *)Buffer + 36;
    }
    v9 = NextGuidEntry;
    SiloState = v7;
  }
  if( v7 == (_ETW_SILODRIVERSTATE *)EtwpHostSiloState )
    UserModeGlobalLogger = UKUSER_SHARED_DATA.UserModeGlobalLogger;
  else
    UserModeGlobalLogger = v7->SiloGlobals->UserSharedData->UserModeGlobalLogger;
  v12 = 0;
  v13 = &EtwpUmglProviders;
  v14 = (char *)Buffer + 28;
  do
  {
    v15 = *((unsigned __int8 *)v13 + 8);
    if( LOBYTE(UserModeGlobalLogger[v15]) )
    {
      if( ++v5 > 0x71C71C7 )
        goto LABEL_17;
      if( v5 <= v8 )
      {
        *(_OWORD *)(v14 - 28) = *(_OWORD *)*v13;
        *((_DWORD *)v14 - 2) = LOBYTE(UserModeGlobalLogger[v15]);
        v16 = HIBYTE(UserModeGlobalLogger[v15]);
        *((_DWORD *)v14 - 1) = 0;
        *(_DWORD *)v14 = v16;
        v14[4] = 1;
        v14 += 36;
      }
    }
    ++v12;
    v13 += 2;
  }
  while( v12 < 0xA );
LABEL_18:
  *(_DWORD *)OutBufferLen = 36 * v5;
  if( v4 >= 0 && v5 > v8 )
    return -1073741789;
  return v4;
}

Referenced by:

NtTraceControl