estructura EVENT_DATA_DESCRIPTOR (evntprov.h)

La estructura EVENT_DATA_DESCRIPTOR define un bloque de datos que se usará en un evento ETW.

Esta estructura se inicializa normalmente mediante la función EventDataDescCreate .

Sintaxis

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;

Miembros

Ptr

Un puntero a los datos.

Importante

Se trata de un valor entero de 64 bits sin signo en arquitecturas de 32 y 64 bits. Para establecer correctamente este valor, convierta el puntero de datos en un entero sin signo antes de asignarlo al Ptr campo, por ejemplo EventDataDescriptor.Ptr = (UINT_PTR)dataPointer;, o use la función EventDataDescCreate .

Size

Tamaño de los datos en bytes.

DUMMYUNIONNAME

DUMMYUNIONNAME.Reserved

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Type

Especifica el uso de estos datos en el evento . Puede ser uno de los siguientes valores:

  • EVENT_DATA_DESCRIPTOR_TYPE_NONE (0)

    Datos de eventos normales.

  • EVENT_DATA_DESCRIPTOR_TYPE_EVENT_METADATA (1)

    Información de descodificación de eventos traceLogging.

  • EVENT_DATA_DESCRIPTOR_TYPE_PROVIDER_METADATA (2)

    Rasgos de proveedor asociados manualmente. Para su uso con sistemas operativos que no admiten la asociación de rasgos de proveedor a través de EventSetInformation. Estos datos se omitirán si los rasgos del proveedor se han configurado a través de EventSetInformation.

  • EVENT_DATA_DESCRIPTOR_TYPE_TIMESTAMP_OVERRIDE (3)

    Invalidación de marca de tiempo de evento de 64 bits. Para su uso al volver a registrar. Tenga en cuenta que el registro de eventos fuera del orden de marca de tiempo puede provocar problemas de ordenación de eventos durante el procesamiento de seguimiento.

Tenga en cuenta que este campo se omitirá a menos que el proveedor de eventos se haya configurado para respetar el Type campo llamando a la API EventSetInformation con la EventProviderSetTraits operación o EventProviderUseDescriptorType .

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Reserved1

No se utiliza. Establecer en 0.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Reserved2

No se utiliza. Establecer en 0.

Comentarios

La mayoría de los proveedores de eventos no llamarán directamente a EventDataDescCreate . En su lugar, la mayoría de los proveedores de eventos se implementan mediante un marco ETW que encapsula las llamadas a EventRegister, EventWrite y EventUnregister. Por ejemplo, puede escribir un manifiesto de evento y, a continuación, usar el compilador de mensajes para generar código de C/C++ para los eventos, o puede usar TraceLogging para evitar la necesidad de un manifiesto.

Para escribir un evento que contenga datos de eventos, crearía una matriz de estructuras de EVENT_DATA_DESCRIPTOR (un elemento para cada fragmento de datos) y llamaría a la función EventDataDescCreate para inicializar cada elemento con los datos que se van a incluir en el evento. Después, pasaría esta matriz a EventWrite para incluir los datos en el evento. Para obtener un ejemplo, consulte Escritura de eventos basados en manifiestos.

Los datos escritos en el evento serán la concatenación de los fragmentos de datos a los que hacen referencia las estructuras EVENT_DATA_DESCRIPTOR pasadas a la EventWrite función. Esta concatenación no contiene relleno y no conserva ninguno de los límites ni la información de tamaño del conjunto original de fragmentos de datos.

El tamaño total de un evento ETW (la suma de los datos proporcionados por el usuario, el EVENT_HEADER y cualquier EVENT_HEADER_EXTENDED_DATA_ITEM que pueda ser necesario para el evento) no puede superar los 64 KB. El tiempo de ejecución de ETW quitará los eventos de más de 64 KB.

Además, también se quitarán los eventos ETW que no caben en un búfer de sesión de seguimiento. Cada búfer tiene un encabezado de 72 bytes, por lo que el evento más grande que puede caber en un búfer es ligeramente menor que el tamaño del búfer. Por ejemplo, una sesión de seguimiento que usa búferes de 32 KB no podrá aceptar ningún evento mayor que 32 696 bytes (32 768 bytes menos el encabezado de 72 bytes deja 32 696 bytes para eventos).

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Encabezado evntprov.h

Consulte también

EVENT_HEADER

EVENT_HEADER_EXTENDED_DATA_ITEM

EventDataDescCreate

EventWrite

EventWriteTransfer

Escribir eventos basados en manifiestos