enableTraceEx 函数 (evntrace.h)

跟踪会话控制器调用 EnableTraceEx 来配置 ETW 事件提供程序将事件记录到跟踪会话的方式。

此函数已过时。 EnableTraceEx2 函数取代此函数。

语法

ULONG WMIAPI EnableTraceEx(
  [in]           LPCGUID                  ProviderId,
  [in, optional] LPCGUID                  SourceId,
  [in]           TRACEHANDLE              TraceHandle,
  [in]           ULONG                    IsEnabled,
  [in]           UCHAR                    Level,
  [in]           ULONGLONG                MatchAnyKeyword,
  [in]           ULONGLONG                MatchAllKeyword,
  [in]           ULONG                    EnableProperty,
  [in, optional] PEVENT_FILTER_DESCRIPTOR EnableFilterDesc
);

参数

[in] ProviderId

提供程序 ID (控制要配置的事件提供程序的 GUID) 。

[in, optional] SourceId

可以唯一标识此配置请求的源的 GUID;如果不需要源标识,则为 NULL , (等效于将 SourceId 设置为 &GUID_NULL) 。 如果指定,则此值在调用提供程序的 EnableCallback 时用作 SourceId 参数。

注意

EnableTrace 的调用和对提供程序 EnableCallback 的相应调用之间并不总是有直接映射。 例如,如果为尚未注册的提供程序调用 EnableTrace ,则对 EnableCallback 的调用将推迟到注册发生,如果跟踪使用者会话停止,ETW 将调用 EnableCallback ,即使没有对 EnableTrace 的相应调用。 在这种情况下,将在 SourceId 设置为 GUID_NULL 的情况下调用 EnableTrace

[in] TraceHandle

要为其配置提供程序的事件跟踪会话的句柄。 启动新的跟踪时 ,StartTrace 函数返回此句柄。 若要获取现有跟踪的句柄,请使用 ControlTrace 根据跟踪的名称查询跟踪属性,然后从返回EVENT_TRACE_PROPERTIES数据的 Wnode.HistoricalContext 字段中获取句柄。

[in] IsEnabled

设置为 1 以启用从提供程序接收事件或调整从提供程序接收事件时使用的设置, (例如更改级别和关键字) 。 设置为 0 可禁用从提供程序接收事件。

[in] Level

一个 值,该值指示你希望提供程序写入的事件的最大级别。 除了满足 MatchAnyKeywordMatchAllKeyword 条件外,如果事件的级别小于或等于此值,提供程序通常会写入事件。

Microsoft 定义级别 1-5 的语义,如下所示。 值越小,表示事件越严重。 EnableLevel 的每个值启用指定的级别和所有更严重的级别。 例如,如果指定 TRACE_LEVEL_WARNING,则使用者将收到警告、错误和关键事件。

Value 含义
TRACE_LEVEL_CRITICAL (1) 异常退出或终止事件
TRACE_LEVEL_ERROR (2) 严重错误事件
TRACE_LEVEL_WARNING (3) 警告事件,例如分配失败
TRACE_LEVEL_INFORMATION (4) 非错误信息事件
TRACE_LEVEL_VERBOSE (5) 详细诊断事件

TRACE_LEVEL 量在 evntrace.h 中定义。 等效 WINMETA_LEVEL 常量在 winmeta.h 中定义。

[in] MatchAnyKeyword

关键字的 64 位位掩码,用于确定你希望提供程序写入的事件类别。 如果事件的关键字 (keyword) 位与此值中设置的任何位匹配,或者事件没有设置关键字 (keyword) 位,除了满足 LevelMatchAllKeyword 条件外,提供程序通常会写入事件。

[in] MatchAllKeyword

关键字的 64 位位掩码,用于限制你希望提供程序写入的事件。 如果事件的关键字 (keyword) 位与此值中设置的所有位匹配,或者事件没有设置关键字 (keyword) 位,除了满足 LevelMatchAnyKeyword 条件外,提供程序通常会写入事件。

此值经常设置为 0。

[in] EnableProperty

指定 ETW 运行时在从此提供程序收集事件时应启用的特殊行为的标志。 若要启用特殊行为,请指定以下一个或多个标志。 否则,请将 EnableProperty 设置为 0。

注意

其中几个标志指示 ETW 应在每个事件中包含额外信息。 数据将写入事件的 扩展数据项 部分。

Value 含义
EVENT_ENABLE_PROPERTY_SID 在扩展数据中包括用户的安全标识符 (SID) 。
EVENT_ENABLE_PROPERTY_TS_ID 在扩展数据中包含终端会话标识符。
EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0 跟踪会话不应记录关键字 (keyword) 为 0 的事件。

[in, optional] EnableFilterDesc

指向筛选器数据的 EVENT_FILTER_DESCRIPTOR 结构。 提供程序使用此来筛选数据,以防止将不符合筛选条件的事件写入会话。 提供程序确定数据的布局以及如何将筛选器应用于事件的数据。 一个会话只能将一个筛选器传递给提供程序。

会话可以调用 TdhEnumerateProviderFilters 函数来查找提供程序已注册支持的筛选器。

返回值

如果函数成功,则返回值ERROR_SUCCESS。

如果函数失败,则返回值为 系统错误代码之一。 下面是一些常见错误及其原因。

  • ERROR_INVALID_PARAMETER

    下列情况之一存在:

    • ProviderIdNULL
    • TraceHandleNULL
  • ERROR_INVALID_FUNCTION

    未注册提供程序时,无法更新级别。

  • ERROR_NO_SYSTEM_RESOURCES

    超出了可以启用提供程序的跟踪会话数。

  • ERROR_ACCESS_DENIED

    只有具有管理权限的用户、组中的用户Performance Log Users以及以 、 LocalServiceNetworkService 身份LocalSystem运行的服务才能启用跨进程会话的事件提供程序。 若要授予受限用户启用事件提供程序的能力,请将他们添加到 Performance Log Users 组或参阅 EventAccessControl

    Windows XP 和 Windows 2000: 任何人都可以启用事件提供程序。

备注

事件跟踪控制器调用此函数以配置将事件写入会话的事件提供程序。 例如,控制器可能调用此函数以开始从提供程序收集事件、调整从提供程序收集的事件的级别或关键字,或停止从提供程序收集事件。

此函数已过时。 对于其他功能,新代码应使用 EnableTraceEx2

在大多数情况下,对 EnableTraceEx 的调用可以转换为 EnableTraceEx2 ,如下所示:

// Obsolete:
Status =
EnableTraceEx(
    ProviderId,
    NULL,           // SourceId
    TraceHandle,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    0,              // EnableProperty
    NULL);          // EnableFilterDesc

// Updated equivalent code:
Status = EnableTraceEx2(
    TraceHandle,
    ProviderId,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    0,              // Timeout
    NULL);          // EnableParameters

在更复杂的方案中,对 EnableTraceEx 的调用可以转换为 EnableTraceEx2 ,如下所示:

// Obsolete:
Status =
EnableTraceEx(
    ProviderId,
    SourceId,
    TraceHandle,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    EnableProperty,
    EnableFilterDesc);

// Updated equivalent code:
ENABLE_TRACE_PARAMETERS EnableParameters = {
    ENABLE_TRACE_PARAMETERS_VERSION_2,
    EnableProperty,
    0,                 // ControlFlags
    SourceId ? *SourceId : GUID_NULL,
    EnableFilterDesc,
    EnableFilterDesc ? 1 : 0 };
Status = EnableTraceEx2(
    TraceHandle,
    ProviderId,
    IsEnabled,
    Level,
    MatchAnyKeyword,
    MatchAllKeyword,
    0,                 // Timeout
    &EnableParameters);

有关为会话配置提供程序的语义的其他详细信息,请参阅 EnableTraceEx2 的文档。

要求

   
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 evntrace.h
Library Advapi32.lib
DLL Advapi32.dll

请参阅

StartTrace

EnableTraceEx2