1

这是我当前的代码:

[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);
        }
    }

但最后,在生成的事件中,如果我将 startDateTime 作为“8/30/2017 5:00:00 PM”提供给该方法,我会将“8/30/3617 5:00:00 PM”视为 startDateTime。它总是在一年中增加1600。

我尝试提供8 作为大小而不是 sizeof(DateTime) ,但我仍然得到相同的结果。如果我将日期更改为字符串并作为字符串传递给 writeeventcore,我会得到正确的日期值,如此处的示例所示。我在这里做错了什么?通过 WriteEventCore 传递 DateTime 的正确方法是什么?

4

1 回答 1

3

当您使用“EventData”时,您必须使用 ETW 对 dateTime 的期望。这恰好是 windows FileTime 格式(很长,即从 1600 开始的秒数)

因此,要将 DateTime 传递给 EventData,您必须执行类似的操作。

long startFileTime = startDateTime.ToFileTime();
data->DataPointer = (IntPtr)(& startFileTime);
data->Size = sizeof(long);
于 2017-09-05T23:34:34.573 回答