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 |