配置和启动事件跟踪会话

要配置事件跟踪会话,可使用 EVENT_TRACE_PROPERTIES 结构来指定会话的属性。 为 EVENT_TRACE_PROPERTIES 结构分配的内存必须足够大,以便同时包含内存中该结构后面的会话和日志文件名。

指定会话属性后,调用 StartTrace 函数启动会话。 如果函数成功执行,则 SessionHandle 参数将包含会话句柄,而 LoggerNameOffset 属性将包含会话名称的偏移量。

要启用希望将事件记录到会话中的提供程序,请调用 EnableTrace 函数以启用经典提供程序,调用 EnableTraceEx 函数以启用基于清单的提供程序。 要在 Windows 8.1、Windows Server 2012 R2 及更高版本中启用希望根据特定条件向会话过滤日志事件的提供程序,请调用 EnableTraceEx2 函数。

此外,还可以调用 TraceSetInformation 函数来跟踪事件的其他信息。 TraceSetInformation 会将额外的跟踪信息放入事件的扩展数据部分,并且可包括跟踪版本信息或系统上当前注册的提供程序等信息。 有关详细信息,请参阅检索其他事件跟踪数据

最多可启用八个跟踪会话,并接收来自同一基于清单的提供程序的事件。 但是,只有一个跟踪会话可以启用经典提供程序。 如果有多个跟踪会话尝试启用经典提供程序,则第一个会话将在第二个会话启用提供程序后停止接收事件。 例如,如果会话 A 启用了提供程序 1,然后会话 B 又启用了提供程序 1,那么只有会话 B 会从提供程序 1 收到事件。

可以使用这三个函数中的任何一个来启用提供程序,但如果使用 EnableTrace 来启用基于清单的提供程序,则可能会丢失功能,因为这样将无法提供 MatchAllKeyword 值、指定要包含在事件中的扩展数据项或提供由提供程序定义的筛选器数据。 有关更多信息,请参阅各功能的“备注”部分。

在 Windows 8.1、Windows Server 2012 R2 和更高版本中,事件有效负载、作用域和堆栈走行过滤器可通过 EnableTraceEx2 函数和 ENABLE_TRACE_PARAMETERSEVENT_FILTER_DESCRIPTOR 结构使用,以便在日志记录器会话中对特定条件进行筛选。 有关事件有效负载筛选器的详细信息,请参阅 TdhCreatePayloadFilterTdhAggregatePayloadFilters 函数以及 ENABLE_TRACE_PARAMETERSEVENT_FILTER_DESCRIPTORPAYLOAD_FILTER_PREDICATE 结构。

要确定启用基于清单的提供程序所使用的级别和关键字,请使用以下命令之一:

  • Logman query provider-name
  • Wevtutil gp provider-name

命令只会列出级别和关键字,提供程序必须为潜在控制器记录任何过滤数据要求。

要枚举基于清单的提供程序,请使用 Wevtutil ep

对于经典提供程序而言,应由提供程序记录并向潜在控制器提供其支持的严重性级别或启用标志。 如果提供程序希望被任何控制器启用,则提供程序应接受 0 作为严重性级别和启用标志,并将 0 解释为执行默认日志记录的请求(无论该请求是什么)。

可以在提供程序注册之前或之后启用提供程序。 在启用提供程序后,ETW 将调用提供程序的回调函数。 如果提供程序未注册,则 ETW 将在其注册后调用提供程序的回调函数。

还可以使用 EnableTrace 函数来禁用提供程序(停止向会话记录事件)或更新提供程序的记录级别或启用标志。 通过 EnableTraceEx 函数,可以禁用提供程序或更新级别、关键字、扩展数据和筛选数据。 每次调用 EnableTraceEnableTraceEx 函数时,ETW 都会调用提供程序的回调函数。 在会话禁用提供程序之前,该提供程序一直处于启用状态。

要在收集事件后停止跟踪会话,请调用 ControlTrace 函数并将 EVENT_TRACE_CONTROL_STOP 作为控制代码进行传递。 要指定要停止的会话,可以传递通过先前调用 StartTrace 函数获得的事件跟踪会话句柄,或者传递先前启动的会话名称。 确保在停止会话前禁用所有提供程序。 如果在首先禁用提供程序之前停止会话,ETW 将禁用提供程序并尝试调用提供程序的控制回调函数。 如果启动会话的应用程序结束时没有禁用提供程序或调用 ControlTrace 函数,则提供程序将保持启用状态。

如果 ControlTrace 成功,则会话属性将被更新,以反映事件跟踪会话的最终属性值和运行统计信息。

有关启动事件跟踪会话的示例,请参阅以下内容:

有关启动跟踪会话的详细信息,请参阅以下内容之一:

配置和启动专用记录器会话

配置和启动 SystemTraceProvider 会话

配置和启动自动记录程序会话

配置和启动 NT 内核记录器会话

ControlTrace

EnableTrace

EnableTraceEx

EnableTraceEx2

ENABLE_TRACE_PARAMETERS

EVENT_FILTER_DESCRIPTOR

EVENT_TRACE_PROPERTIES

PAYLOAD_FILTER_PREDICATE

StartTrace

TdhAggregatePayloadFilters

TdhCreatePayloadFilter

更新事件跟踪会话