这是我目前的代码:
[NonEvent]
unsafe void InsertViaWriteEventCore(
int eventId,
DateTime startDateTime,
DateTime endDateTime)
{
const int eventDataCount = 2;
{
EventData* data = stackalloc EventData[eventDataCount];
data->DataPointer = (IntPtr)(&startDateTime);
data->Size = sizeof(DateTime);
data[1].DataPointer = (IntPtr)(&endDateTime);
data[1].Size = sizeof(DateTime);
WriteEventCore(eventId, eventDataCount, data);
}
}
但最后,在生成的事件中,我看到" 8/30/3617 5:00:00 PM"如果我提供startDateTime作为" 8/30/2017 5:00:00 PM"方法。它总是在一年中增加1600个。
我尝试提供8 as the size而不是sizeof(DateTime),我仍然得到相同的结果。如果我将日期更改为字符串并传递给writeeventcore作为字符串,我会得到正确的日期值,如示例here中所示。我在这做错了什么?通过WriteEventCore传递DateTime的正确方法是什么?
答案 0 :(得分:1)
当您使用'EventData'时,您必须使用ETW对dateTime的期望。这恰好是Windows FileTime格式(这是一个长度,即从1600开始的秒数)
所以要将DateTime传递给EventData,你必须做这样的事情。
long startFileTime = startDateTime.ToFileTime();
data->DataPointer = (IntPtr)(& startFileTime);
data->Size = sizeof(long);