3

我有兴趣让自定义 ETW 事件显示Start TimeEnd Time,就像一些默认的 Windows 事件一样,以便以甘特图形式呈现它,如下所示:

自定义 ETW 事件的期望结果

我已经破解了Bruce Dawson 的演示清单和多提供程序文件,以将开始时间结束时间字段添加到事件模板之一。

但是,我什至无法将该字段识别为时间字段。

我按照Microsoft 规范中的描述为事件有效负载编写模板,如下所示

<data inType="win:FILETIME" outType="xs:dateTime" name="Start Time" />           
<data inType="win:FILETIME" outType="xs:dateTime" name="End Time" />

并相应地转换我的 QueryPerformanceCounter 变量:

//start is LARGE_INTEGER
//end is LARGE_INTEGER

FILETIME ftStart;
ftStart.dwLowDateTime = start.LowPart;
ftStart.dwHighDateTime = start.HighPart;

FILETIME ftEnd;
ftEnd.dwLowDateTime = end.LowPart;
ftEnd.dwHighDateTime = end.HighPart;

WPA 在相关字段中显示“无法解析数据”: WPA 无法解析数据

然后我查看Microsoft WPA 文档

如果图形是甘特图,则移动到图形元素区域的每一列都必须仅包含时间戳值。甘特图中水平条中的一个标记代表一个时间戳值。

因此,我查看并看到时间戳只是 LARGE_INT,所以我回到原始格式并像这样编写清单:

<data inType="win:UInt64" outType="win:ETWTIME" name="Start Time" />           
<data inType="win:UInt64" outType="win:ETWTIME" name="End Time" />

然后数据以大量纳秒而不是时间的形式呈现。而且我无法将任一字段选择为“开始时间”或“结束时间”。

我究竟做错了什么?

4

0 回答 0