EtwpInitializeTimeStamp
VOID __stdcall EtwpInitializeTimeStamp(_WMI_LOGGER_CONTEXT *LoggerContext){
unsigned __int64 v2;
_ETW_REF_CLOCK *p_ReferenceTime;
char v4;
_LARGE_INTEGER v5;
_LARGE_INTEGER v6;
_LARGE_INTEGER v7;
unsigned int ClockType;
unsigned int v9;
_LARGE_INTEGER v10;
INT64 v11[2];
_LARGE_INTEGER v12;
__int64 v13;
switch( LoggerContext->ClockType )
{
case 2u:
v2 = 0i64;
break;
case 3u:
v2 = 3i64;
break;
case 4u:
v13 = 0i64;
if( ((int(__fastcall *)(__int64 *))off_140C009E0[0])(&v13) < 0 )
{
LoggerContext->ClockType = 1;
goto LABEL_5;
}
v2 = 2i64;
break;
default:
LoggerContext->ClockType = 1;
LABEL_5:
v2 = 1i64;
break;
}
LoggerContext->GetCpuClock = v2;
p_ReferenceTime = &LoggerContext->ReferenceTime;
if( (LoggerContext->Flags & 2) == 0 )
{
if( LoggerContext->ClockType == 3 )
{
LoggerContext->ReferenceTime.StartPerfClock = EtwpGetLoggerTimeStamp((INT64)LoggerContext);
KeQuerySystemTimePrecise(&LoggerContext->ReferenceTime.StartTime);
goto LABEL_14;
}
LODWORD(v13) = 0;
v12.QuadPart = 0i64;
*(_OWORD *)v11 = 0i64;
RtlGetMultiTimePrecise((INT64)v11);
v4 = v13;
v5 = (_LARGE_INTEGER)v11[1];
v6 = (_LARGE_INTEGER)v11[0];
if( (v13 & 5) == 5 )
{
v7 = v12;
ClockType = LoggerContext->ClockType;
p_ReferenceTime->StartTime = v12;
switch( ClockType )
{
case 2u:
LoggerContext->ReferenceTime.StartPerfClock = v7;
break;
case 1u:
LoggerContext->ReferenceTime.StartPerfClock = v6;
break;
case 4u:
LoggerContext->ReferenceTime.StartPerfClock = v5;
LABEL_30:
if( ClockType == 4 )
goto LABEL_14;
break;
}
if( (v4 & 3) == 3 )
LoggerContext->ReferenceQpcDelta = v5.QuadPart - v6.QuadPart;
goto LABEL_14;
}
LoggerContext->ReferenceTime.StartPerfClock = EtwpGetLoggerTimeStamp((INT64)LoggerContext);
KeQuerySystemTimePrecise(&LoggerContext->ReferenceTime.StartTime);
LoggerContext->Flags &= ~0x8000000u;
ClockType = LoggerContext->ClockType;
goto LABEL_30;
}
v9 = LoggerContext->ClockType;
p_ReferenceTime->StartTime.QuadPart = *(&ExBootDevicesRemovedEvent + 191);
LoggerContext->ReferenceQpcDelta = *(&ExBootDevicesRemovedEvent + 247);
if( v9 == 3 )
{
LoggerContext->ReferenceTime.StartPerfClock.QuadPart = *(&ExBootDevicesRemovedEvent + 192);
}
else
{
v10 = (_LARGE_INTEGER)*(&ExBootDevicesRemovedEvent + 246);
if( v9 == 2 )
v10 = (_LARGE_INTEGER)*(&ExBootDevicesRemovedEvent + 191);
LoggerContext->ReferenceTime.StartPerfClock = v10;
}
LABEL_14:
LoggerContext->RealtimeReferenceTime = *p_ReferenceTime;
}Referenced by:
EtwpStartLogger