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 |