структура EVENT_TRACE_HEADER (evntrace.h)

Структура EVENT_TRACE_HEADER содержит стандартные сведения трассировки событий, общие для всех событий, написанных TraceEvent.

Синтаксис

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;

Члены

Size

Общее количество байтов события. Размер включает размер структуры заголовка, а также размер любых данных, относящихся к событиям, добавленных в заголовок.

На входных данных размер должен быть меньше размера буфера сеанса трассировки событий минус 72 (0x48).

В выходных данных не используйте это число в вычислениях.

DUMMYUNIONNAME

DUMMYUNIONNAME.FieldTypeFlags

Зарезервировано.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.HeaderType

Зарезервировано.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.MarkerFlags

Зарезервировано.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.Version

Это сводка членов класса. Байт нижнего порядка содержит тип, следующий байт — уровень, а последние два байта — версию.

DUMMYUNIONNAME2.Class

DUMMYUNIONNAME2.Class.Type

Тип события. Поставщик может определять собственные типы событий или использовать предопределенные типы событий, перечисленные в следующей таблице.

  • EVENT_TRACE_TYPE_CHECKPOINT: событие контрольной точки. Используется для события, которое не находится в начале или конце действия.

  • EVENT_TRACE_TYPE_DC_END: событие завершения сбора данных.

  • EVENT_TRACE_TYPE_DC_START: событие начала сбора данных.

  • EVENT_TRACE_TYPE_DEQUEUE: событие dequeue. Используйте, когда действие помещается в очередь перед его началом. Используйте EVENT_TRACE_TYPE_START, чтобы отметить время постановки рабочего элемента в очередь. Используйте тип события dequeue, чтобы отметить время начала работы над элементом. Используйте EVENT_TRACE_TYPE_END, чтобы отметить время завершения работы над элементом.

  • EVENT_TRACE_TYPE_END: событие End. Используется для трассировки конечного состояния многоэтапного события.

  • EVENT_TRACE_TYPE_EXTENSION: событие расширения. Используется для события, которое является продолжением предыдущего события. Например, используйте тип события расширения, когда трассировка событий записывает больше данных, чем может поместиться в буфере сеанса.

  • EVENT_TRACE_TYPE_INFO: информационное событие. Это тип события по умолчанию.

  • EVENT_TRACE_TYPE_REPLY: событие ответа. Используется, когда приложение, запрашивающее ресурсы, может получить несколько ответов. Например, если клиентское приложение запрашивает URL-адрес и веб-сервер отвечает, отправляя несколько файлов, каждый полученный файл можно пометить как событие ответа.

  • EVENT_TRACE_TYPE_START: событие start. Используется для трассировки начального состояния многоэтапного события.

Если вы определяете собственные типы событий, следует использовать числа, начиная с 10. Однако ничто не мешает использовать любые числа, которые вы хотите использовать. Если GUID класса трассировки событий поддерживает несколько типов событий, потребители будут использовать тип события для определения события и интерпретации его содержимого.

DUMMYUNIONNAME2.Class.Level

Определенное поставщиком значение, определяющее уровень серьезности, используемый для создания события. Значение в диапазоне от 0 до 255. Контроллер указывает уровень серьезности при вызове функции EnableTraceEx2 . Поставщик получает уровень серьезности, вызывая функцию GetTraceEnableLevel из своей реализации ControlCallback . Поставщик использует значение для задания этого элемента.

Трассировка событий Windows определяет следующие уровни серьезности. При выборе уровня выше 1 также будут включены события для более низких уровней. Например, если контроллер указывает TRACE_LEVEL_WARNING (3), поставщик также создает события TRACE_LEVEL_FATAL (1) и TRACE_LEVEL_ERROR (2).

Значение Значение
TRACE_LEVEL_CRITICAL (1) Аномальные события выхода или завершения
TRACE_LEVEL_ERROR (2) События серьезных ошибок
TRACE_LEVEL_WARNING (3) Предупреждающие события, такие как сбои выделения
TRACE_LEVEL_INFORMATION (4) События без ошибок, такие как события входа или выхода
TRACE_LEVEL_VERBOSE (5) Подробные события трассировки

DUMMYUNIONNAME2.Class.Version

Указывает версию класса трассировки событий, который используется для регистрации события. Укажите ноль, если существует только одна версия класса трассировки событий. Версия сообщает потребителю, какой класс MOF следует использовать для расшифровки данных события.

ThreadId

В выходных данных идентифицирует поток, создающий событие.

Обратите внимание, что в Windows 2000 ThreadId было значением ULONGLONG .

ProcessId

В выходных данных определяет процесс, создающий событие.

Windows 2000: Этот элемент не поддерживается.

TimeStamp

В выходных данных содержит время возникновения события. Разрешение является системным временем, если элемент ProcessTraceModeEVENT_TRACE_LOGFILE не содержит PROCESS_TRACE_MODE_RAW_TIMESTAMP флаг. В этом случае разрешение зависит от значения члена Wnode.ClientContextEVENT_TRACE_PROPERTIES на момент создания сеанса контроллером.

DUMMYUNIONNAME3

DUMMYUNIONNAME3.Guid

Guid класса трассировки событий. Идентификатор GUID класса можно использовать для идентификации категории событий, а элемент Class.Type — для определения события в категории событий.

Кроме того, можно использовать член GuidPtr , чтобы указать GUID класса.

Windows XP и Windows 2000: Идентификатор GUID класса должен быть зарегистрирован ранее с помощью функции RegisterTraceGuids .

DUMMYUNIONNAME3.GuidPtr

Указатель на GUID класса трассировки событий. Кроме того, можно использовать элемент Guid , чтобы указать GUID класса.

При записи события трассировка событий Windows использует указатель для копирования GUID в событие (guid включается в событие, а не указатель).

Если вы используете этот элемент, элемент Flags также должен содержать WNODE_FLAG_USE_GUID_PTR.

DUMMYUNIONNAME4

DUMMYUNIONNAME4.DUMMYSTRUCTNAME

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.KernelTime

Затраченное время выполнения инструкций в режиме ядра в единицах времени ЦП. Если вы используете закрытый сеанс, используйте значение в элементе ProcessorTime . Дополнительные сведения см. в подразделе "Примечания".

DUMMYUNIONNAME4.DUMMYSTRUCTNAME.UserTime

Затраченное время выполнения инструкций в пользовательском режиме в единицах времени ЦП. Если вы используете закрытый сеанс, используйте значение в элементе ProcessorTime . Дополнительные сведения см. в подразделе "Примечания".

DUMMYUNIONNAME4.ProcessorTime

Для частных сеансов — затраченное время выполнения инструкций в пользовательском режиме в тактах ЦП.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.ClientContext

Зарезервировано.

DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.Flags

Для этого элемента необходимо задать WNODE_FLAG_TRACED_GUID и при необходимости можно указать любое сочетание следующих элементов.

  • WNODE_FLAG_USE_GUID_PTR. Укажите, содержит ли член GuidPtr guid класса.

  • WNODE_FLAG_USE_MOF_PTR. Укажите, содержит ли массив структур MOF_FIELD данные событий, добавленные к этой структуре. Количество элементов в массиве ограничено MAX_MOF_FIELDS.

Комментарии

Не забудьте инициализировать память для этой структуры до нуля, прежде чем задавать какие-либо члены.

Вы можете использовать элементы KernelTime и UserTime , чтобы определить стоимость ЦП в единицах для набора инструкций (значения указывают, что загрузка ЦП взимается с этого потока во время ведения журнала). Например, если события A и B последовательно регистрируются в одном потоке и имеют номера использования ЦП 150 и 175, то действие, выполненное этим потоком между событиями A и B, стоит 25 единиц времени ЦП (175–150).

TimerResolution структуры TRACE_LOGFILE_HEADER содержит разрешение таймера использования ЦП в единицах 100 наносекунд. Вы можете использовать разрешение таймера с значениями времени ядра и времени пользователя, чтобы определить количество времени ЦП, используемое набором инструкций. Например, если разрешение таймера равно 156 250, то 25 единиц времени ЦП равно 0,39 секунды (156 250 * 25 * 100 / 1 000 000 000 000). Это количество времени ЦП (не затраченное настенное время), используемое набором инструкций между событиями A и B.

Обратите внимание, что разрешение таймера использования ЦП обычно очень низкое (около 10 или более миллисекундах). Таким образом, показатели использования ЦП нельзя использовать для учета использования времени ЦП в потоках с высокой точностью. Скорее, они подходят для долгосрочного статистического анализа.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть evntrace.h

См. также раздел

EVENT_TRACE

EventCallback

Traceevent