traceEventInstance 函数 (evntrace.h)

基于 RegisterTraceGuids 的 (“Classic”) 事件提供程序使用 TraceEventInstance 函数将结构化事件发送到具有实例标识符的事件跟踪会话。

事件使用实例标识符将事件与事务相关联。 此函数还可用于跟踪相关事件之间的分层关系。

语法

ULONG WMIAPI TraceEventInstance(
  [in] TRACEHANDLE            TraceHandle,
  [in] PEVENT_INSTANCE_HEADER EventTrace,
  [in] PEVENT_INSTANCE_INFO   InstInfo,
  [in] PEVENT_INSTANCE_INFO   ParentInstInfo
);

参数

[in] TraceHandle

记录事件实例的事件跟踪会话的句柄。 提供程序在其 ControlCallback 实现中调用 GetTraceLoggerHandle 函数时获取句柄。

[in] EventTrace

指向 EVENT_INSTANCE_HEADER 结构的指针。 可以选择将特定于事件的数据追加到 结构。 可以记录的最大事件是 64K。 必须为 EVENT_INSTANCE_HEADER 结构的以下成员指定值。

  • 大小
  • 标志
  • RegHandle

根据提供程序提供的信息的复杂性,还应考虑为以下成员指定值。

  • Class.Type
  • Class.Level

若要跟踪相关事件之间的分层关系,还需设置 ParentRegHandle 成员。

[in] InstInfo

指向 EVENT_INSTANCE_INFO 结构的指针,该结构包含此事件跟踪类的注册句柄和实例标识符。 使用 CreateTraceInstanceId 函数初始化 结构。

[in] ParentInstInfo

指向 EVENT_INSTANCE_INFO 结构的指针,该结构包含父事件跟踪类及其实例标识符的注册句柄。 使用 CreateTraceInstanceId 函数初始化 结构。 如果不跟踪分层关系,则设置为 NULL

返回值

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

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

  • ERROR_INVALID_FLAGS

    EVENT_INSTANCE_HEADERFlags 成员不包含WNODE_FLAG_TRACED_GUID

  • ERROR_OUTOFMEMORY

    内存不足,无法完成函数调用。 以下“备注”部分描述了导致此错误代码的原因。

  • ERROR_INVALID_PARAMETER

    下列情况之一存在:

    • EventTraceNULL
    • pInstInfoNULL
    • pInstInfo 的成员为 NULL
    • TraceHandleNULL
    • EVENT_INSTANCE_HEADERSize 成员不正确。
  • ERROR_INVALID_HANDLE

    TraceHandle 无效或指定 NT 内核记录器会话句柄。

  • ERROR_NOT_ENOUGH_MEMORY

    该会话已没有可用缓冲区可供写入。 这种情况可能会在事件发生率过高时出现,因为此时磁盘子系统会过载或者缓冲区数目会太小。 TraceEvent 不会阻止更多缓冲区可用,而是放弃事件。

    Windows 2000 和 Windows XP: 不支持。

  • ERROR_OUTOFMEMORY

    该事件被丢弃,因为尽管缓冲池尚未达到其最大大小,但可用内存不足,无法分配额外的缓冲区,并且没有可用于接收事件的缓冲区。

  • ERROR_MORE_DATA

    单个事件中的数据不能跨多个缓冲区。 跟踪事件限制为事件跟踪会话缓冲区的大小减去 EVENT_INSTANCE_HEADER 结构的大小。

备注

基于 MOF 的 ETW 提供程序调用此函数。

注意

大多数开发人员不会调用此函数。 此 API 支持基于 MOF 的 ETW,但基于 MOF 的 ETW 已弃用,改用基于清单的 ETW。 此外,大多数基于 MOF 的提供程序使用由 MC.exe 生成的包装器函数,而不是直接调用 ETW API。

在提供程序调用此函数之前,提供程序

  • 必须调用 RegisterTraceGuids 函数来注册自身和事件跟踪类。
  • 必须调用 CreateTraceInstanceId 函数,以便为已注册的事件跟踪类创建实例标识符。
  • 必须启用。 控制器调用 EnableTrace 函数来启用提供程序。

事件要么写入日志文件,要么实时发送到事件跟踪使用者,要么同时写入两者。 传递给 StartTraceEVENT_TRACE_PROPERTIES 结构的 LogFileMode 成员定义事件的发送位置。

跟踪事件按其发生顺序写入。

若要跟踪不相关的事件,请使用 TraceEvent 函数。

Windowsxp: 无法正常工作。

示例

有关使用 CreateTraceInstanceIdTraceEventInstance 生成相关事件集的示例,请参阅 跟踪事件实例

要求

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

另请参阅

CreateTraceInstanceId

EVENT_INSTANCE_HEADER

EVENT_INSTANCE_INFO

RegisterTraceGuids

TraceEvent