使用事件 (事件跟踪)

事件跟踪使用者可以处理来自一个或多个提供程序的事件。 使用者可以从日志文件或实时处理事件。 仅当控制器为会话指定实时日志记录模式时,才能实时使用事件。 出于性能原因,不建议在 Windows Vista 之前进行实时处理。

若要指定要从中处理事件的跟踪会话,请使用 EVENT_TRACE_LOGFILE 结构。 必须为要处理的每个日志文件或实时会话初始化此结构的副本。

若要使用日志文件中的事件,请将 LogFileName 成员设置为日志文件的名称。 若要使用实时会话中的事件,请将 LoggerName 成员设置为会话名称。 还可以使用此结构指定用于处理事件的 BufferCallback 回调和 EventCallbackEventRecordCallback 回调。

  • EventRecordCallback - 接收和处理所有事件 (包括从一个或多个日志文件和实时会话) 标头事件。 如果使用跟踪数据帮助程序函数来分析事件数据,或者想要检索有关事件的元数据,则可以实现此回调。
  • EventCallback - 接收和处理所有事件 (包括从一个或多个日志文件和实时会话) 标头事件。
  • BufferCallback - 接收并处理有关当前缓冲区的摘要信息,例如丢失的事件。 ETW 在将缓冲区中的所有事件传送给使用者后调用回调。 使用者还可以使用此回调来取消事件处理;但是,如果实时使用事件,ETW 会传送事件,直到控制器停止会话。

定义一个或多个跟踪会话后,针对要处理的每个跟踪会话调用 OpenTrace 函数;可以从一个或多个日志文件处理事件,但只能从一个实时会话处理事件。 然后,将 OpenTrace 返回的跟踪会话句柄列表传递给 ProcessTrace 函数。 ProcessTrace 函数合并事件,按时间顺序对事件进行排序,然后逐个将其传递到回调。 可以使用 StartTimeEndTime 参数筛选事件,以仅包含属于特定时间范围的事件。 ProcessTrace 函数会阻止线程,直到使用者处理跟踪会话中的所有事件、BufferCallback 返回 FALSE 或调用 CloseTrace

在 Windows Vista 之前: 只能在 ProcessTrace 返回后调用 CloseTrace

有关演示如何使用使用清单、MOF 或 TMF 文件发布的事件的示例,请参阅 使用 TDH 检索事件数据。 请注意,从 Windows Vista 开始,应使用跟踪数据帮助程序 (TDH) 函数来使用事件。

有关演示如何使用使用 MOF 发布的事件的示例,请参阅 使用 MOF 检索事件数据