KiUpdateSystemTime
VOID __stdcall KiUpdateSystemTime(UINT64 TimeDelta, UINT64 Flags, UINT64 a3){
char v3;
UINT64 PerformanceCounter;
_LARGE_INTEGER v7;
__int16 v8;
v3 = a3;
_disable();
RtlWriteAcquireTickLock((signed __int64 *)&KUSER_SHARED_DATA.TimeUpdateLock);
PerformanceCounter = KeQueryPerformanceCounter(0i64);
v7.QuadPart = KiComputeNewSystemTime(PerformanceCounter);
if( TimeDelta )
{
qword_140C50468 = 0i64;
v7.QuadPart = TimeDelta + *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
}
KUSER_SHARED_DATA.BaselineSystemTimeQpc = PerformanceCounter;
KUSER_SHARED_DATA.SystemTime.High2Time = v7.anonymous_0.HighPart;
*(_LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart = v7;
if( Flags )
{
KUSER_SHARED_DATA.QpcSystemTimeIncrement = *(_QWORD *)Flags;
KUSER_SHARED_DATA.QpcSystemTimeIncrementShift = *(_BYTE *)(Flags + 8);
}
++KUSER_SHARED_DATA.TimeUpdateLock;
if( (v3 & 1) == 0 )
{
if( (v3 & 4) != 0 )
{
KeBootTimeBias = 0i64;
KeBootTime = v7;
}
else
{
KeBootTime.QuadPart += TimeDelta;
KeBootTimeBias += TimeDelta;
}
}
if( (v8 & 0x200) != 0 )
_enable();
}Referenced by:
KeSetTimeAdjustment
KiCalibrateTimeAdjustment
KiSetSystemTimeDpc