Использование событий (трассировка событий)
Потребители трассировки событий могут обрабатывать события от одного или нескольких поставщиков. Потребители могут обрабатывать события из файла журнала или в режиме реального времени. События можно использовать в режиме реального времени, только если контроллер указывает режим ведения журнала в реальном времени для сеанса. По соображениям производительности обработка в режиме реального времени не рекомендуется выполнять до windows Vista.
Чтобы указать сеанс трассировки, из которого требуется обрабатывать события, используйте структуру EVENT_TRACE_LOGFILE . Необходимо инициализировать копию этой структуры для каждого файла журнала или сеанса в режиме реального времени, который требуется обработать.
Чтобы использовать события из файла журнала, задайте для элемента LogFileName имя файла журнала. Чтобы использовать события из сеанса в режиме реального времени, задайте для элемента LoggerName имя сеанса. Эта структура также используется для указания обратного вызова BufferCallback и обратного вызова EventCallback или EventRecordCallback , используемого для обработки событий.
- EventRecordCallback получает и обрабатывает все события (включая событие заголовка) из одного или нескольких файлов журнала и сеанса в режиме реального времени. Этот обратный вызов реализуется при использовании вспомогательных функций данных трассировки для анализа данных события или при необходимости извлечения метаданных о событии.
- EventCallback — получает и обрабатывает все события (включая событие заголовка) из одного или нескольких файлов журнала и сеанса в режиме реального времени.
- BufferCallback — получает и обрабатывает сводные сведения о текущем буфере, такие как потерянные события. Трассировка событий Windows вызывает обратный вызов после доставки всех событий в буфере потребителю. Потребитель также может использовать этот обратный вызов для отмены обработки событий; Однако если вы используете события в режиме реального времени, трассировка событий Windows доставляет события до тех пор, пока контроллер не остановит сеанс.
Определив один или несколько сеансов трассировки, вызовите функцию OpenTrace для каждого сеанса трассировки, который требуется обработать; Вы можете обрабатывать события из одного или нескольких файлов журнала, но только из одного сеанса в режиме реального времени. Затем вы передаете список дескрипторов сеанса трассировки, которые OpenTrace возвращает в функцию ProcessTrace . Функция ProcessTrace объединяет события, сортирует их по хронологическому порядку, а затем доставляет их в обратные вызовы по одному за раз. События можно отфильтровать, чтобы включить только те, которые попадают в определенный период времени с помощью параметров StartTime и EndTime . Функция ProcessTrace блокирует поток до тех пор, пока потребитель не обработает все события в сеансах трассировки, BufferCallback не вернет ЗНАЧЕНИЕ FALSE или пока вы не вызовете CloseTrace.
До Windows Vista: Метод CloseTrace можно вызвать только после возврата ProcessTrace .
Пример использования событий, опубликованных с помощью файлов манифеста, MOF или TMF, см. в разделе Извлечение данных событий с помощью TDH. Обратите внимание, что начиная с Windows Vista для использования событий следует использовать вспомогательные функции данных трассировки (TDH).
Пример использования событий, опубликованных с помощью MOF, см. в разделе Извлечение данных событий с помощью MOF.