ExpRefreshSystemTime
VOID __stdcall ExpRefreshSystemTime(){
__int64 v0;
char v1;
int v2;
LARGE_INTEGER v3;
struct _TIME_FIELDS TimeFields;
union _LARGE_INTEGER SystemTime;
LARGE_INTEGER NewTime;
union _LARGE_INTEGER Time;
SystemTime.QuadPart = 0i64;
NewTime.QuadPart = 0i64;
Time.QuadPart = 0i64;
TimeFields = 0i64;
v0 = PsGetCurrentServerSiloGlobals()[133];
ExAcquireTimeRefreshLock(1u);
v1 = ExpSystemIsInCmosMode;
if( (unsigned __int8)HalQueryRealTimeClock(&TimeFields) )
{
if( RtlTimeFieldsToTime(&TimeFields, &Time) )
{
v2 = *(_DWORD *)(v0 + 436);
if( (unsigned __int8)ExpRefreshTimeZoneInformation() )
{
if( v2 != *(_DWORD *)(v0 + 436) )
{
v3 = *(LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart;
SystemTime = *(union _LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart;
if( !ExpRealTimeIsUniversal )
{
if( v1 )
{
ExLocalTimeToSystemTime(&Time, &NewTime);
KeSetSystemTime(&NewTime, &SystemTime, 0i64);
goto LABEL_9;
}
ExSystemTimeToLocalTime(&SystemTime, &Time);
RtlTimeToTimeFields(&Time, &TimeFields);
HalSetRealTimeClock(&TimeFields);
v3 = SystemTime;
}
NewTime = v3;
LABEL_9:
PoNotifySystemTimeSet(&NewTime, &SystemTime, 3ui64);
}
}
}
}
ExReleaseResourceLite(&ExpTimeRefreshLock);
KeLeaveCriticalRegion();
}Referenced by:
CmCompleteRegistryInitialization
CmpFinishSystemHivesLoad