Функция EventWriteString (evntprov.h)
Записывает событие трассировки событий Windows, содержащее строку в качестве данных. Эту функцию не следует использовать.
Синтаксис
ULONG EVNTAPI EventWriteString(
[in] REGHANDLE RegHandle,
[in] UCHAR Level,
[in] ULONGLONG Keyword,
[in] PCWSTR String
);
Параметры
[in] RegHandle
Дескриптор регистрации поставщика. Дескриптор поступает из EventRegister. Созданное событие будет использовать Идентификатор поставщика, связанный с дескриптором.
[in] Level
8-разрядное число, используемое для описания серьезности или важности события.
Важно!
ProviderId, Level и Keyword являются основными средствами фильтрации событий. Другие виды фильтрации возможны, но имеют гораздо более высокие издержки. Всегда назначайте ненулевой уровень и ключевое слово каждому событию.
Дополнительные сведения об уровне событий см. в разделе EVENT_DESCRIPTOR .
[in] Keyword
64-разрядная битовая маска, используемая для указания членства события в наборе категорий событий.
Важно!
ProviderId, Level и Keyword являются основными средствами фильтрации событий. Другие виды фильтрации возможны, но имеют гораздо более высокие издержки. Всегда назначайте ненулевой уровень и ключевое слово каждому событию.
Дополнительные сведения о ключевое слово события см. в EVENT_DESCRIPTOR.
[in] String
Строка с завершением NUL для записи в качестве данных события.
Возвращаемое значение
Возвращает ERROR_SUCCESS в случае успешного выполнения или кода ошибки. Возможные коды ошибок:
- ERROR_INVALID_PARAMETER: один или несколько параметров недопустимы.
- ERROR_INVALID_HANDLE. Недопустимый дескриптор регистрации поставщика.
- ERROR_ARITHMETIC_OVERFLOW: размер события больше допустимого максимума (64 КБ — заголовок).
- ERROR_MORE_DATA. Размер буфера сеанса слишком мал для события.
- ERROR_NOT_ENOUGH_MEMORY. Происходит, когда заполненные буферы пытаются выполнить запись на диск, но операции ввода-вывода на диске выполняются недостаточно быстро. Это происходит при медленном выполнении диска и интенсивном трафике событий. В конечном итоге отсутствуют свободные (пустые) буферы, и событие удаляется.
- STATUS_LOG_FILE_FULL. Файл воспроизведения в режиме реального времени заполнен. События не регистрируются в сеансе, пока потребитель в режиме реального времени не будет использовать события из файла воспроизведения.
Код ошибки в основном предназначен для использования в сценариях отладки и диагностики. Большая часть рабочего кода должна продолжать выполняться и сообщать о событиях, даже если не удалось написать событие трассировки событий Windows, поэтому сборки выпуска обычно должны игнорировать код ошибки.
Комментарии
Этот API не полезен и не должен использоваться.
- Большинство средств анализа трассировки событий Windows неправильно поддерживают только строковые события без манифеста.
- Без манифеста важные сведения о событии (например, имя поставщика, идентификатор события и имя события) недоступны, поэтому полученные события трудно использовать, даже если средство анализа поддерживает события только для строк.
- При использовании манифеста эта функция ведет себя почти точно так же, как код события на основе манифеста с одним строковым полем. Однако события на основе манифеста лучше поддерживаются средствами анализа трассировки. Кроме того, код, созданный MC.exe для события с одним строковым полем, более эффективен, чем функция EventWriteString .
Вместо использования этого API рассмотрите следующие варианты:
- Используйте TraceLoggingProvider.h для записи событий, которые хорошо поддерживаются средствами анализа трассировки событий Windows, работы без манифеста и включения метаданных, таких как имя поставщика и имя события.
- Написание манифеста инструментирования. Создайте простое событие с одним строковым значением, заканчивающееся NUL. Вы можете записывать и собирать события даже без манифеста. Манифест потребуется только для декодирования собранной трассировки.
EventWriteString записывает событие с полезными данными, состоящими из указанной строки. Этот API почти эквивалентен следующему коду:
EVENT_DESCRIPTOR eventDescriptor;
EVENT_DATA_DESCRIPTOR dataDescriptor;
EventDescCreate(&eventDescriptor, 0, 0, 0, Level, 0, 0, Keyword);
EventDataDescCreate(&dataDescriptor, String, (wcslen(String) + 1) * sizeof(WCHAR));
return EventWrite(RegHandle, &eventDescriptor, 1, &dataDescriptor);
Результирующее событие совпадает с любым другим событием, созданным EventWrite , за исключением того, что для результирующего события установлен флаг EVENT_HEADER_FLAG_STRING_ONLY (сведения о флагах событий см. в разделе EVENT_HEADER ).
Обратите внимание, что событие записывается с идентификатором, версией, opcode, задачей и каналом, равным 0.
Обратите внимание, что событие использует идентификатор действия текущего потока.
Средства анализа трассировки событий Windows, которые знают о флаге EVENT_HEADER_FLAG_STRING_ONLY , могут извлекать строковое значение, даже если декодер не может найти другие сведения о декодировании для поставщика событий. Однако без манифеста средства не смогут определить имя поставщика события.
Требования
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | evntprov.h |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |