estrutura EVENT_TRACE_HEADER (evntrace.h)

A estrutura EVENT_TRACE_HEADER contém informações de rastreamento de eventos padrão comuns a todos os eventos gravados por TraceEvent.

Sintaxe

typedef struct _EVENT_TRACE_HEADER {
  USHORT        Size;
  union {
    USHORT FieldTypeFlags;
    struct {
      UCHAR HeaderType;
      UCHAR MarkerFlags;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
  union {
    ULONG Version;
    struct {
      UCHAR  Type;
      UCHAR  Level;
      USHORT Version;
    } Class;
  } DUMMYUNIONNAME2;
  ULONG         ThreadId;
  ULONG         ProcessId;
  LARGE_INTEGER TimeStamp;
  union {
    GUID      Guid;
    ULONGLONG GuidPtr;
  } DUMMYUNIONNAME3;
  union {
    struct {
      ULONG KernelTime;
      ULONG UserTime;
    } DUMMYSTRUCTNAME;
    ULONG64 ProcessorTime;
    struct {
      ULONG ClientContext;
      ULONG Flags;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME4;
} EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER;

Membros

Size

Número total de bytes do evento. O tamanho inclui o tamanho da estrutura de cabeçalho, além do tamanho de qualquer dado específico do evento acrescentado ao cabeçalho.

Na entrada, o tamanho deve ser menor que o tamanho do buffer da sessão de rastreamento de eventos menos 72 (0x48).

Na saída, não use esse número em cálculos.

DUMMYUNIONNAME

DUMMYUNIONNAME.FieldTypeFlags

Reservado.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.HeaderType

Reservado.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.MarkerFlags

Reservado.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.Version

Este é um roll-up dos membros da Classe. O byte de baixa ordem contém o Tipo, o próximo byte contém o Nível e os dois últimos bytes contêm a versão.

DUMMYUNIONNAME2.Class

DUMMYUNIONNAME2.Class.Type

Tipo de evento. Um provedor pode definir seus próprios tipos de evento ou usar os tipos de evento predefinidos listados na tabela a seguir.

  • EVENT_TRACE_TYPE_CHECKPOINT: evento Checkpoint. Use para um evento que não esteja no início ou no final de uma atividade.

  • EVENT_TRACE_TYPE_DC_END: evento final da coleta de dados.

  • EVENT_TRACE_TYPE_DC_START: evento de início da coleta de dados.

  • EVENT_TRACE_TYPE_DEQUEUE: Evento de remoção. Use quando uma atividade for enfileirada antes de começar. Use EVENT_TRACE_TYPE_START para marcar a hora em que um item de trabalho está na fila. Use o tipo de evento de dequeue para marcar a hora em que o trabalho no item realmente começa. Use EVENT_TRACE_TYPE_END para marcar a hora em que o trabalho no item é concluído.

  • EVENT_TRACE_TYPE_END: evento final. Use para rastrear o estado final de um evento de várias etapas.

  • EVENT_TRACE_TYPE_EXTENSION: evento de extensão. Use para um evento que é uma continuação de um evento anterior. Por exemplo, use o tipo de evento de extensão quando um rastreamento de evento registrar mais dados do que pode caber em um buffer de sessão.

  • EVENT_TRACE_TYPE_INFO: evento informativo. Esse é o tipo de evento padrão.

  • EVENT_TRACE_TYPE_REPLY: Evento de resposta. Use quando um aplicativo que solicita recursos puder receber várias respostas. Por exemplo, se um aplicativo cliente solicitar uma URL e o servidor Web responder enviando vários arquivos, cada arquivo recebido poderá ser marcado como um evento de resposta.

  • EVENT_TRACE_TYPE_START: iniciar evento. Use para rastrear o estado inicial de um evento de várias etapas.

Se você definir seus próprios tipos de evento, deverá usar números a partir de 10. No entanto, não há nada que impeça você de usar os números que deseja usar. Se o GUID da classe de rastreamento de eventos der suporte a vários tipos de evento, os consumidores usarão o tipo de evento para determinar o evento e como interpretar seu conteúdo.

DUMMYUNIONNAME2.Class.Level

Valor definido pelo provedor que define o nível de severidade usado para gerar o evento. O valor varia de 0 a 255. O controlador especifica o nível de gravidade quando chama a função EnableTraceEx2 . O provedor recupera o nível de gravidade chamando a função GetTraceEnableLevel de sua implementação ControlCallback . O provedor usa o valor para definir esse membro.

O ETW define os seguintes níveis de gravidade. Selecionar um nível superior a 1 também incluirá eventos para níveis mais baixos. Por exemplo, se o controlador especificar TRACE_LEVEL_WARNING (3), o provedor também gerará eventos TRACE_LEVEL_FATAL (1) e TRACE_LEVEL_ERROR (2).

Valor Significado
TRACE_LEVEL_CRITICAL (1) Eventos anormais de saída ou encerramento
TRACE_LEVEL_ERROR (2) Eventos de erro grave
TRACE_LEVEL_WARNING (3) Eventos de aviso, como falhas de alocação
TRACE_LEVEL_INFORMATION (4) Eventos sem erro, como eventos de entrada ou saída
TRACE_LEVEL_VERBOSE (5) Eventos de rastreamento detalhados

DUMMYUNIONNAME2.Class.Version

Indica a versão da classe de rastreamento de evento que você está usando para registrar o evento em log. Especifique zero se houver apenas uma versão da classe de rastreamento de eventos. A versão informa ao consumidor qual classe MOF usar para decifrar os dados do evento.

ThreadId

Na saída, identifica o thread que gerou o evento.

Observe que, no Windows 2000, ThreadId era um valor ULONGLONG .

ProcessId

Na saída, identifica o processo que gerou o evento.

Windows 2000: Não há suporte para esse membro.

TimeStamp

Na saída, contém a hora em que o evento ocorreu. A resolução é a hora do sistema, a menos que o membro ProcessTraceMode de EVENT_TRACE_LOGFILE contenha o PROCESS_TRACE_MODE_RAW_TIMESTAMP sinalizador, nesse caso, a resolução depende do valor do membro Wnode.ClientContext de EVENT_TRACE_PROPERTIES no momento em que o controlador criou a sessão.

DUMMYUNIONNAME3

DUMMYUNIONNAME3.Guid

GUID da classe de rastreamento de eventos. Você pode usar o GUID de classe para identificar uma categoria de eventos e o membro Class.Type para identificar um evento dentro da categoria de eventos.

Como alternativa, você pode usar o membro GuidPtr para especificar o GUID de classe.

Windows XP e Windows 2000: O GUID de classe deve ter sido registrado anteriormente usando a função RegisterTraceGuids .

DUMMYUNIONNAME3.GuidPtr

Ponteiro para um GUID de classe de rastreamento de eventos. Como alternativa, você pode usar o membro Guid para especificar o GUID de classe.

Quando o evento é gravado, o ETW usa o ponteiro para copiar o GUID para o evento (o GUID está incluído no evento, não no ponteiro).

Se você usar esse membro, o membro Flags também deverá conter WNODE_FLAG_USE_GUID_PTR.

DUMMYUNIONNAME4

DUMMYUNIONNAME4.DUMMYSTRUCTNAME

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.KernelTime

Tempo de execução decorrido para instruções de modo kernel, em unidades de tempo de CPU. Se você estiver usando uma sessão privada, use o valor no membro ProcessorTime . Para obter mais informações, consulte Comentários.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.UserTime

Tempo de execução decorrido para instruções de modo de usuário, em unidades de tempo de CPU. Se você estiver usando uma sessão privada, use o valor no membro ProcessorTime . Para obter mais informações, consulte Comentários.

DUMMYUNIONNAME4.ProcessorTime

Para sessões privadas, o tempo de execução decorrido para instruções de modo de usuário, em tiques de CPU.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.ClientContext

Reservado.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.Flags

Você deve definir esse membro como WNODE_FLAG_TRACED_GUID e, opcionalmente, pode especificar qualquer combinação do seguinte.

  • WNODE_FLAG_USE_GUID_PTR: especifique se o membro GuidPtr contém o GUID da classe.

  • WNODE_FLAG_USE_MOF_PTR: especifique se uma matriz de estruturas de MOF_FIELD contém os dados de evento acrescentados a essa estrutura. O número de elementos na matriz é limitado a MAX_MOF_FIELDS.

Comentários

Certifique-se de inicializar a memória dessa estrutura como zero antes de definir qualquer membro.

Você pode usar os membros KernelTime e UserTime para determinar o custo da CPU em unidades para um conjunto de instruções (os valores indicam o uso da CPU cobrado para esse thread no momento do registro em log). Por exemplo, se o Evento A e o Evento B forem registrados consecutivamente pelo mesmo thread e tiverem os números de uso da CPU 150 e 175, a atividade que foi executada por esse thread entre os eventos A e B custará 25 unidades de tempo de CPU (175 – 150).

O TimerResolution da estrutura TRACE_LOGFILE_HEADER contém a resolução do temporizador de uso da CPU em unidades de 100 nanossegundos. Você pode usar a resolução do temporizador com os valores de tempo de kernel e tempo do usuário para determinar a quantidade de tempo de CPU que o conjunto de instruções usou. Por exemplo, se a resolução do temporizador for de 156.250, 25 unidades de tempo de CPU serão 0,39 segundos (156.250 * 25 * 100 / 1.000.000.000). Essa é a quantidade de tempo de CPU (não tempo decorrido do relógio de parede) usado pelo conjunto de instruções entre os eventos A e B.

Observe, no entanto, que a resolução do temporizador de uso da CPU normalmente é muito baixa (cerca de 10 ou mais milissegundos). Portanto, os números de uso da CPU não podem ser usados para considerar o uso de tempo de CPU entre threads com alta precisão. Em vez disso, eles são adequados para o tipo estatístico de análise de longo prazo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho evntrace.h

Confira também

EVENT_TRACE

EventCallback

Traceevent