Макрос TraceLoggingCustom (traceloggingprovider.h)
Макрос-оболочка TraceLogging , который добавляет в событие поле, упакованного с помощью пользовательского сериализатора.
Большинству событий TraceLogging не требуется использовать пользовательский сериализатор и не следует использовать TraceLoggingCustom.
Синтаксис
void TraceLoggingCustom(
[in] pValue,
[in] cbValue,
[in] protocol,
[in] bSchema,
[in] cbSchema,
[in, optional] __VA_ARGS__
);
Параметры
[in] pValue
Указатель на полезные данные поля, сериализованный во время выполнения сериализатором из указанного семейства протоколов.
[in] cbValue
Размер полезных данных поля в байтах, сериализованный во время выполнения сериализатором из указанного семейства протоколов.
[in] protocol
Семейство протоколов, которое может быть определяемым корпорацией Майкрософт значением от 0 до 4 или определяемым пользователем значением от 5 до 31. Значения, определяемые корпорацией Майкрософт, определяются макросами, начиная с TRACELOGGING_PROTOCOL_
.
[in] bSchema
Разделенный запятыми список значений байтов, содержащий сведения, необходимые для декодирования полезных данных (т. е. схемы) в формате, определенном протоколом. Значения в этом списке должны быть константой времени компиляции. Пример: (0x12, 0x23, 0x34)
[in] cbSchema
Количество байтовых значений, указанных в bSchema. Это значение должно быть константой времени компиляции.
[in, optional] __VA_ARGS__
Необязательные параметры имени, описания и тегов для определения поля.
TraceLoggingCustom можно указать с 5, 6, 7 или 8 параметрами. Если параметр не указан, будет использоваться значение по умолчанию. Например, выражение TraceLoggingCustom(&x.data, sizeof(x.data), p, (schema), cbSchema)
будет эквивалентно TraceLoggingCustom(&x.data, sizeof(x.data), p, (schema), cbSchema, "&x.data", "", 0)
.
[in, optional] name
Имя, используемое для поля события. Если он указан, параметр name должен быть строковым литералом (не переменной) и не должен содержать символы "\0". Если этот параметр не указан, имя поля события будет основано на pValue.
[in, optional] description
Описание значения поля события. Если он указан, параметр description должен быть строковым литералом и будет включен в PDB.
[in, optional] tags
Целочисленное значение константы времени компиляции. Низкие 28 бит значения будут включены в метаданные поля. Семантика этого значения определяется потребителем события. Во время обработки события это значение можно получить из поля EVENT_PROPERTY_INFO Теги.
Возвращаемое значение
None
Remarks
TraceLoggingCustom(pValue, cbValue, protocol, (schema...), cbSchema, ...)
можно использовать в качестве параметра для вызова макроса TraceLoggingWrite . Каждый параметр TraceLoggingCustom добавляет в событие настраиваемое сериализованное поле. Большинство событий TraceLogging не используют пользовательские сериализаторы и не должны использовать TraceLoggingCustom. Декодеры трассировки событий Windows общего назначения не поддерживают поля, использующие настраиваемую сериализацию и обычно обрабатывают поля как TDH_INTYPE_BINARY.
Декодеры должны обращаться к сериализованным полям TraceLoggingCustom с помощью API TDH. Структура TRACE_EVENT_INFO, возвращаемая TdhGetEventInformation, будет содержать две структуры EVENT_PROPERTY_INFO, связанные с зарегистрированным полем TraceLoggingCustom. Они обычно коррелируют с данными, найденными в большом двоичном объекте UserData EVENT_RECORD для двоичного поля (TDH_INTYPE_BINARY).
- Первая из двух EVENT_PROPERTY_INFO структур — это свойство Length, которое описывает длину сериализованных полезных данных (т. е. cbValue).
- Второй — это свойство, которое ссылается на полезные данные пользователя (pbValue). Второе свойство будет иметь свойство PropertyParamLength (в ссылке на свойство Length) и PropertyHasCustomSchema.
Декодеры должны распознавать, что свойство PropertyHasCustomSchema задано, и обращаться к члену customSchemaType EVENT_PROPERTY_INFO для CustomSchemaOffset, который является смещением в TRACE_EVENT_INFORMATION, где находятся тип протокола и метаданные протокола. Там они могут найти метаданные, которые они передали в формате (псевдоструктура):
struct _CUSTOM_SCHEMA {
UINT16 protocolType;
UINT16 cbSchema;
BYTE bSchema[cbSchema];
};
Существующие декодеры, которые не выполняют эти дополнительные действия для распознавания флага PropertyHasCustomSchema и вместо этого ссылаются на часть nonStructType объединения EVENT_PROPERTY_INFO для декодирования события, будут легко обрабатывать полезные данные, как если бы они были TDH_INTYPE_BINARY.
Примеры
// Value generated at runtime by serializer:
BYTE rgValue[] = {...};
TraceLoggingWrite(
g_hProvider,
"MyEventName",
TraceLoggingCustom(
rgValue,
sizeof(rgValue),
TRACELOGGING_PROTOCOL_MYPROTOCOL,
( 0x0, 0x1, 0x2 ), // Generated at compile-time
3,
"MyCustomField"),
TraceLoggingLevel(WINEVENT_LEVEL_WARNING), // Levels defined in <winmeta.h>
TraceLoggingKeyword(MyEventCategories)); // Provider-defined categories
Требования
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | traceloggingprovider.h |