Как сохранить DateTime в EventSource через WriteEventCore
Это мой текущий код:
[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);
}
}
Но, наконец, в генерируемых событиях я вижу "30.083617:00:00" как startDateTime, если я предоставляю startDateTime "30.08.2017 17:00:00" для метода. Это всегда добавляет 1600 к году.
Я попытался предоставить 8 как размер вместо sizeof(DateTime), и я все еще получил тот же результат. Я получаю правильные значения даты, если я изменю даты на строку и передам writeeventcore в виде строки, как показано в примере здесь. Что я здесь не так делаю? Как правильно передать DateTime через WriteEventCore?
1 ответ
Когда вы используете EventData, вы должны использовать то, что ETW ожидает для dateTime. Это происходит в формате Windows FileTime (это длинный, который является числом секунд от 1600)
Таким образом, чтобы передать DateTime в EventData, вы должны сделать что-то вроде этого.
long startFileTime = startDateTime.ToFileTime();
data->DataPointer = (IntPtr)(& startFileTime);
data->Size = sizeof(long);