Поделиться через


структура EVENT_DATA_DESCRIPTOR (evntprov.h)

Структура EVENT_DATA_DESCRIPTOR определяет блок данных, которые будут использоваться в событии трассировки событий Windows.

Эта структура обычно инициализируется с помощью функции EventDataDescCreate .

Синтаксис

typedef struct _EVENT_DATA_DESCRIPTOR {
  ULONGLONG Ptr;
  ULONG     Size;
  union {
    ULONG Reserved;
    struct {
      UCHAR  Type;
      UCHAR  Reserved1;
      USHORT Reserved2;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;

Члены

Ptr

Указатель на данные.

Важно!

Это 64-разрядное целое число без знака в 32-разрядной и 64-разрядной архитектуре. Чтобы правильно задать это значение, приведите указатель данных к целому числу без знака перед его назначением полю Ptr , например EventDataDescriptor.Ptr = (UINT_PTR)dataPointer;, или используйте функцию EventDataDescCreate .

Size

Размер данных в байтах.

DUMMYUNIONNAME

DUMMYUNIONNAME.Reserved

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Type

Указывает использование этих данных в событии . Может иметь одно из следующих значений:

  • EVENT_DATA_DESCRIPTOR_TYPE_NONE (0)

    Обычные данные о событиях.

  • EVENT_DATA_DESCRIPTOR_TYPE_EVENT_METADATA (1)

    Сведения о декодировании событий TraceLogging.

  • EVENT_DATA_DESCRIPTOR_TYPE_PROVIDER_METADATA (2)

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

  • EVENT_DATA_DESCRIPTOR_TYPE_TIMESTAMP_OVERRIDE (3)

    Переопределение 64-разрядной метки времени события. Для использования при повторной записи в журнал. Обратите внимание, что ведение журнала событий вне порядка меток времени может привести к проблемам с упорядочением событий во время обработки трассировки.

Обратите внимание, что это поле будет игнорироваться, если только поставщик событий не был настроен для учета Type поля путем вызова API EventSetInformation с EventProviderSetTraits помощью операции или EventProviderUseDescriptorType .

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Reserved1

Не используется. Задайте значение 0.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Reserved2

Не используется. Задайте значение 0.

Комментарии

Большинство поставщиков событий не вызывают EventDataDescCreate напрямую. Вместо этого большинство поставщиков событий реализуются с помощью платформы трассировки событий Windows, которая заключает вызовы в EventRegister, EventWrite и EventUnregister. Например, можно написать манифест события , а затем использовать компилятор сообщений для создания кода C/C++ для событий, или использовать TraceLogging , чтобы избежать необходимости в манифесте.

Чтобы написать событие, содержащее данные события, необходимо создать массив EVENT_DATA_DESCRIPTOR структур (по одному элементу для каждого блока данных) и вызвать функцию EventDataDescCreate , чтобы инициализировать каждый элемент с данными, которые будут включены в событие. Затем вы передаете этот массив в EventWrite , чтобы включить данные в событие . Пример см. в разделе Запись событий на основе манифеста.

Данные, записанные в событие, будут объединением блоков данных, на которые ссылается EVENT_DATA_DESCRIPTOR структуры, передаваемые в функцию EventWrite . Это объединение не содержит заполнения и не сохраняет границы или сведения о размере из исходного набора фрагментов данных.

Общий размер события трассировки событий Windows (сумма предоставленных пользователем данных, EVENT_HEADER и все EVENT_HEADER_EXTENDED_DATA_ITEM , которые могут потребоваться для события) не может превышать 64 КБ. События размером более 64 КБ будут удалены средой выполнения трассировки событий Windows.

Кроме того, будут удалены события трассировки событий Windows, которые не помещаются в буфер сеанса трассировки. Каждый буфер имеет 72-байтный заголовок, поэтому наибольшее событие, которое может поместиться в буфер, немного меньше размера буфера. Например, сеанс трассировки, использующий буферы размером 32 КБ, не сможет принимать события размером более 32 696 байт (32 768-байтовый буфер минус 72-байтовый заголовок оставляет 32 696 байт для событий).

Требования

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

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

EVENT_HEADER

EVENT_HEADER_EXTENDED_DATA_ITEM

EventDataDescCreate

EventWrite

EventWriteTransfer

Написание событий на основе манифеста