EtwWriteEx 函数 (wdm.h)

EtwWriteEx 函数是一个跟踪函数,用于发布支持在内核模式驱动程序代码中进行筛选的事件。

语法

NTSTATUS EtwWriteEx(
  [in]           REGHANDLE              RegHandle,
  [in]           PCEVENT_DESCRIPTOR     EventDescriptor,
  [in]           ULONG64                Filter,
  [in]           ULONG                  Flags,
  [in, optional] LPCGUID                ActivityId,
  [in, optional] LPCGUID                RelatedActivityId,
  [in]           ULONG                  UserDataCount,
  [in, optional] PEVENT_DATA_DESCRIPTOR UserData
);

参数

[in] RegHandle

指向事件提供程序注册句柄的指针,如果事件提供程序注册成功,则由 EtwRegister 函数返回。

[in] EventDescriptor

指向 EVENT_DESCRIPTOR 结构的指针。

[in] Filter

标识事件不会写入到的会话的实例标识符。 也就是说,该值是应从日志记录中排除的会话掩码(已筛选掉)。 使用按位 OR 指定多个标识符。 如果不支持筛选器,或者事件正在写入所有会话(没有筛选器失败),则设置为零。 有关获取会话标识符的信息,请参阅 EtwEnableCallback 回调的 FilterData 参数。

[in] Flags

保留。 必须为零(0)。

[in, optional] ActivityId

指示与事件关联的活动的标识符。 ActivityID 提供了一种方法来对相关事件进行分组,并在端到端跟踪中使用。 如果为 NULL,则 ETW 从线程本地存储获取标识符。 有关获取此标识符的详细信息,请参阅 EtwActivityIdControl

[in, optional] RelatedActivityId

上一个组件中的活动标识符。 使用此参数可将组件的事件链接到以前的组件事件。 若要获取为上一组件设置的活动标识符,请参阅 EtwActivityIdControl 函数的 ControlCode 参数的说明。

[in] UserDataCount

UserData中的EVENT_DATA_DESCRIPTOR结构数。 最大数字为 128。

[in, optional] UserData

指向EVENT_DATA_DESCRIPTOR结构的数组的指针。 如果 UserDataCount 为零,请将此参数设置为 NULL。 数据必须按清单中指定的顺序排列。

返回值

如果成功或出现以下错误值之一,则返回ERROR_SUCCESS。

言论

EtwWriteEx 函数是与 user-mode EventWriteEx 函数等效的内核模式。 使用此函数编写的事件数据需要清单。 清单嵌入在提供程序中,因此提供程序必须可供使用者使用数据。 若要确保发布事件有使用者,可以在调用 EtwWrite etwWrite 之前调用 EtwEventEnabledEtwProviderEnabled

如果要在端到端跟踪方案中将不同组件中的事件关联,请使用 ActivityIdRelatedActivityId 参数。 例如,组件 A、B 和 C 对相关活动执行工作,并希望链接其事件,以便使用者可以使用与该活动相关的所有事件。

可以在任何 IRQL 中调用 EtwWriteEx。 但是,当 IRQL 大于APC_LEVEL时,传递给 EtwWriteEtwWriteExEtwWriteStringEtwWriteTransfer 函数的任何数据不得分页。 也就是说,在大于 APC_LEVEL 的 IRQL 上运行的任何内核模式例程都无法访问可分页内存。 传递给 EtwWriteEtwWriteExEtwWriteStringEtwWriteTransfer 函数的数据必须驻留在系统空间内存中,而不考虑 IRQL 是什么。

要求

要求 价值
最低支持的客户端 Windows 7
支持的最低服务器 Windows Server 2008 R2
目标平台 普遍
标头 wdm.h
NtosKrnl.lib
DLL NtosKrnl.exe

另请参阅

EtwWrite

EventWrite

EventWriteEx