ExUpdateSystemTimeFromCmos
VOID __stdcall ExUpdateSystemTimeFromCmos(UINT8 UpdateInterruptTime, UINT64 MaxSepInSeconds){
unsigned __int64 v3;
unsigned __int64 v4;
_LARGE_INTEGER Time;
_LARGE_INTEGER SystemTime;
_LARGE_INTEGER PreviousTime;
_TIME_FIELDS TimeFields;
SystemTime.QuadPart = 0i64;
Time.QuadPart = 0i64;
TimeFields = 0i64;
if( !(_DWORD)MaxSepInSeconds )
LODWORD(MaxSepInSeconds) = ExpMaxTimeSeperationBeforeCorrect;
v3 = 10000000i64 * (unsigned int)MaxSepInSeconds;
if( (unsigned __int8)HalQueryRealTimeClock(&TimeFields) && RtlTimeFieldsToTime(&TimeFields, &Time) )
{
if( *(&stru_140CF2E80 + 1829) )
SystemTime = Time;
else
ExLocalTimeToSystemTime(&Time, &SystemTime);
PreviousTime = *(_LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart;
if( SystemTime.QuadPart <= *(__int64 *)&KUSER_SHARED_DATA.SystemTime.LowPart )
v4 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - SystemTime.QuadPart;
else
v4 = SystemTime.QuadPart - *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
if( v4 > v3 )
ExpSetSystemTime(0, UpdateInterruptTime, TimeChangeHardwareSync, SystemTime, &PreviousTime);
}
}Referenced by:
ExpTimeRefreshWork
KdpTimeSlipWork
PopTransitionSystemPowerStateEx