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


Использование событий (событийная трассировка)

Потребители трассировки событий могут обрабатывать события от одного или нескольких поставщиков. Потребители могут обрабатывать события из файла журнала или в режиме реального времени. События можно обрабатывать в режиме реального времени только в том случае, если контроллер задает этот режим ведения журнала для сеанса. По соображениям производительности обработка в режиме реального времени не рекомендуется до Windows Vista.

Чтобы указать сеанс трассировки, из которого требуется обработать события, используйте структуру EVENT_TRACE_LOGFILE. Необходимо инициализировать копию этой структуры для каждого файла журнала или сеанса реального времени, который требуется обработать.

Чтобы использовать события из файла журнала, задайте элементу logFileName имя файла журнала. Чтобы использовать события из сеанса в режиме реального времени, задайте для элемента LoggerName значение имени сеанса. Эта структура также используется для указания обратных вызовов BufferCallback и EventCallback или EventRecordCallback, используемых для обработки событий.

  • EventRecordCallback— получает и обрабатывает все события (включая событие заголовка) из одного или нескольких файлов журнала и сеанса реального времени. Этот обратный вызов реализуется при использовании вспомогательных функций данных трассировки для анализа данных события или получения метаданных о событии.
  • EventCallback— получает и обрабатывает все события (включая событие заголовка) из одного или нескольких файлов журнала и сеанса в режиме реального времени.
  • BufferCallback— получает и обрабатывает сводную информацию о текущем буфере, например о событиях, потерянных. ETW вызывает обратный вызов после доставки всех событий в буфере потребителю. Потребитель также может использовать этот обратный вызов для отмены обработки событий; Однако если вы используете события в режиме реального времени, ETW доставляет события, пока контроллер не остановит сеанс.

После определения одного или нескольких сеансов трассировки вызовите функцию OpenTrace для каждого сеанса трассировки, который требуется обработать; События можно обрабатывать из одного или нескольких файлов журнала, но только из одного сеанса в режиме реального времени. Затем вы передаете список дескрипторов сеансов трассировки, которые OpenTrace возвращаются в функцию ProcessTrace. Функция ProcessTrace объединяет события, сортирует их в хронологическом порядке, а затем передает их обратному вызову по одному. События можно отфильтровать, чтобы включить только те, которые попадают в определенный интервал времени с помощью параметров StartTime и EndTime. Функция ProcessTrace блокирует поток до тех пор, пока потребитель не обрабатывает все события в сеансах трассировки, BufferCallback возвращает FALSEили вызывается CloseTrace.

до Windows Vista: Можно вызывать CloseTrace только после возврата ProcessTrace.

Пример использования событий, опубликованных с помощью манифеста, MOF или файлов TMF, см. в разделе Извлечение данных событий с помощью TDH. Обратите внимание, что начиная с Windows Vista, необходимо использовать функции TDH для обработки событий.

Для примера, который показывает, как использовать события, опубликованные с помощью MOF, см. раздел Извлечение данных событий с помощью MOF.