estructura EVENT_TRACE_HEADER (evntrace.h)

La estructura de EVENT_TRACE_HEADER contiene información de seguimiento de eventos estándar común a todos los eventos escritos por TraceEvent.

Sintaxis

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;

Miembros

Size

Número total de bytes del evento. El tamaño incluye el tamaño de la estructura de encabezado, además del tamaño de los datos específicos del evento anexados al encabezado.

En la entrada, el tamaño debe ser menor que el tamaño del búfer de la sesión de seguimiento de eventos menos 72 (0x48).

En la salida, no use este número en cálculos.

DUMMYUNIONNAME

DUMMYUNIONNAME.FieldTypeFlags

Reservado.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.HeaderType

Reservado.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.MarkerFlags

Reservado.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.Version

Se trata de un resumen de los miembros de La clase. El byte de orden bajo contiene el tipo, el siguiente byte contiene el nivel y los dos últimos bytes contienen la versión.

DUMMYUNIONNAME2.Class

DUMMYUNIONNAME2.Class.Type

Tipo de evento. Un proveedor puede definir sus propios tipos de eventos o usar los tipos de eventos predefinidos enumerados en la tabla siguiente.

  • EVENT_TRACE_TYPE_CHECKPOINT: evento checkpoint. Se usa para un evento que no está al principio o al final de una actividad.

  • EVENT_TRACE_TYPE_DC_END: evento final de recopilación de datos.

  • EVENT_TRACE_TYPE_DC_START: evento de inicio de recopilación de datos.

  • EVENT_TRACE_TYPE_DEQUEUE: evento Dequeue. Use cuando se pone en cola una actividad antes de comenzar. Use EVENT_TRACE_TYPE_START para marcar la hora en que se pone en cola un elemento de trabajo. Use el tipo de evento de puesta en cola para marcar la hora en que comienza realmente el trabajo en el elemento. Use EVENT_TRACE_TYPE_END para marcar la hora en que se completa el trabajo en el elemento.

  • EVENT_TRACE_TYPE_END: evento End. Use para realizar un seguimiento del estado final de un evento de varios pasos.

  • EVENT_TRACE_TYPE_EXTENSION: evento de extensión. Se usa para un evento que es una continuación de un evento anterior. Por ejemplo, use el tipo de evento de extensión cuando un seguimiento de eventos registra más datos de los que pueden caber en un búfer de sesión.

  • EVENT_TRACE_TYPE_INFO: evento informativo. Este es el tipo de evento predeterminado.

  • EVENT_TRACE_TYPE_REPLY: evento reply. Se usa cuando una aplicación que solicita recursos puede recibir varias respuestas. Por ejemplo, si una aplicación cliente solicita una dirección URL y el servidor web responde enviando varios archivos, cada archivo recibido se puede marcar como un evento de respuesta.

  • EVENT_TRACE_TYPE_START: evento Start. Use para realizar un seguimiento del estado inicial de un evento de varios pasos.

Si define sus propios tipos de eventos, debe usar números a partir de 10. Sin embargo, no hay nada para evitar que use ningún número que desee usar. Si el GUID de la clase de seguimiento de eventos admite varios tipos de eventos, los consumidores usarán el tipo de evento para determinar el evento y cómo interpretar su contenido.

DUMMYUNIONNAME2.Class.Level

Valor definido por el proveedor que define el nivel de gravedad usado para generar el evento. El valor oscila entre 0 y 255. El controlador especifica el nivel de gravedad cuando llama a la función EnableTraceEx2 . El proveedor recupera el nivel de gravedad llamando a la función GetTraceEnableLevel desde su implementación de ControlCallback . El proveedor usa el valor para establecer este miembro.

ETW define los siguientes niveles de gravedad. Al seleccionar un nivel superior a 1, también se incluirán eventos para niveles inferiores. Por ejemplo, si el controlador especifica TRACE_LEVEL_WARNING (3), el proveedor también genera eventos TRACE_LEVEL_FATAL (1) y TRACE_LEVEL_ERROR (2).

Valor Significado
TRACE_LEVEL_CRITICAL (1) Eventos de salida o finalización anómalos
TRACE_LEVEL_ERROR (2) Eventos de error graves
TRACE_LEVEL_WARNING (3) Eventos de advertencia, como errores de asignación
TRACE_LEVEL_INFORMATION (4) Eventos que no son de error, como eventos de entrada o salida
TRACE_LEVEL_VERBOSE (5) Eventos de seguimiento detallados

DUMMYUNIONNAME2.Class.Version

Indica la versión de la clase de seguimiento de eventos que está usando para registrar el evento. Especifique cero si solo hay una versión de la clase de seguimiento de eventos. La versión indica al consumidor qué clase MOF va a usar para descifrar los datos del evento.

ThreadId

En la salida, identifica el subproceso que generó el evento.

Tenga en cuenta que en Windows 2000, ThreadId era un valor de ULONGLONG .

ProcessId

En la salida, identifica el proceso que generó el evento.

Windows 2000: Este miembro no se admite.

TimeStamp

En la salida, contiene la hora en que se produjo el evento. La resolución es el tiempo del sistema a menos que el miembro ProcessTraceMode de EVENT_TRACE_LOGFILE contenga la PROCESS_TRACE_MODE_RAW_TIMESTAMP marca , en cuyo caso la resolución depende del valor del miembro Wnode.ClientContext de EVENT_TRACE_PROPERTIES en el momento en que el controlador creó la sesión.

DUMMYUNIONNAME3

DUMMYUNIONNAME3.Guid

GUID de la clase de seguimiento de eventos. Puede usar el GUID de clase para identificar una categoría de eventos y el miembro Class.Type para identificar un evento dentro de la categoría de eventos.

Como alternativa, puede usar el miembro GuidPtr para especificar el GUID de clase.

Windows XP y Windows 2000: El GUID de clase debe haberse registrado anteriormente mediante la función RegisterTraceGuids .

DUMMYUNIONNAME3.GuidPtr

Puntero a un GUID de clase de seguimiento de eventos. Como alternativa, puede usar el miembro GUID para especificar el GUID de clase.

Cuando se escribe el evento, ETW usa el puntero para copiar el GUID en el evento (el GUID se incluye en el evento, no el puntero).

Si usa este miembro, el miembro Flags también debe contener WNODE_FLAG_USE_GUID_PTR.

DUMMYUNIONNAME4

DUMMYUNIONNAME4.DUMMYSTRUCTNAME

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.KernelTime

Tiempo de ejecución transcurrido para las instrucciones en modo kernel, en unidades de tiempo de CPU. Si usa una sesión privada, use el valor en el miembro ProcessorTime en su lugar. Para obtener más información, vea la sección Comentarios.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.UserTime

Tiempo de ejecución transcurrido para las instrucciones en modo de usuario, en unidades de tiempo de CPU. Si usa una sesión privada, use el valor en el miembro ProcessorTime en su lugar. Para obtener más información, vea la sección Comentarios.

DUMMYUNIONNAME4.ProcessorTime

En el caso de las sesiones privadas, el tiempo de ejecución transcurrido para las instrucciones del modo de usuario, en tics de CPU.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.ClientContext

Reservado.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.Flags

Debe establecer este miembro en WNODE_FLAG_TRACED_GUID y, opcionalmente, puede especificar cualquier combinación de lo siguiente.

  • WNODE_FLAG_USE_GUID_PTR: especifique si el miembro GuidPtr contiene el GUID de clase.

  • WNODE_FLAG_USE_MOF_PTR: especifique si una matriz de estructuras de MOF_FIELD contiene los datos del evento anexados a esta estructura. El número de elementos de la matriz se limita a MAX_MOF_FIELDS.

Comentarios

Asegúrese de inicializar la memoria de esta estructura en cero antes de establecer los miembros.

Puede usar los miembros KernelTime y UserTime para determinar el costo de CPU en unidades para un conjunto de instrucciones (los valores indican el uso de CPU que se cobra a ese subproceso en el momento del registro). Por ejemplo, si el mismo subproceso registra consecutivamente el evento A y el evento B tienen números de uso de CPU 150 y 175, la actividad realizada por ese subproceso entre los eventos A y B cuesta 25 unidades de tiempo de CPU (175 – 150).

TimerResolution de la estructura TRACE_LOGFILE_HEADER contiene la resolución del temporizador de uso de CPU en unidades de 100 nanosegundos. Puede usar la resolución del temporizador con los valores de tiempo del kernel y tiempo de usuario para determinar la cantidad de tiempo de CPU que se usa en el conjunto de instrucciones. Por ejemplo, si la resolución del temporizador es de 156 250, 25 unidades de tiempo de CPU es de 0,39 segundos (156 250 * 25 * 100 / 1 000 000 000 000). Esta es la cantidad de tiempo de CPU (no el tiempo de reloj transcurrido) utilizada por el conjunto de instrucciones entre los eventos A y B.

Sin embargo, tenga en cuenta que la resolución del temporizador de uso de CPU suele ser muy baja (aproximadamente 10 o más milisegundos). Por lo tanto, no se pueden usar números de uso de CPU para tener en cuenta el uso del tiempo de CPU entre subprocesos con alta precisión. En su lugar, son adecuados para el tipo estadístico de análisis a largo plazo.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado evntrace.h

Consulte también

EVENT_TRACE

EventCallback

TraceEvent