ExpRefreshSystemTime
VOID __stdcall ExpRefreshSystemTime(INT64 a1){
_EX_TIMEZONE_STATE *ExTimeZoneState;
char v2;
int LastTimeZoneBias;
_LARGE_INTEGER v4;
INT64 v5;
_TIME_FIELDS TimeFields;
_LARGE_INTEGER SystemTime;
_LARGE_INTEGER NewTime;
_LARGE_INTEGER Time;
SystemTime.QuadPart = 0i64;
NewTime.QuadPart = 0i64;
Time.QuadPart = 0i64;
TimeFields = 0i64;
ExTimeZoneState = PsGetCurrentServerSiloGlobals((_KSPIN_LOCK *)a1)->ExTimeZoneState;
ExAcquireTimeRefreshLock(1u);
v2 = ExpSystemIsInCmosMode;
if( (unsigned __int8)HalQueryRealTimeClock(&TimeFields) )
{
if( RtlTimeFieldsToTime(&TimeFields, &Time) )
{
LastTimeZoneBias = ExTimeZoneState->LastTimeZoneBias;
if( ExpRefreshTimeZoneInformation() )
{
if( LastTimeZoneBias != ExTimeZoneState->LastTimeZoneBias )
{
v4 = *(_LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart;
SystemTime = *(_LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart;
if( !*(&stru_140CF2E80 + 1829) )
{
if( v2 )
{
ExLocalTimeToSystemTime(&Time, &NewTime);
KeSetSystemTime(&NewTime, &SystemTime, 0i64);
goto LABEL_9;
}
ExSystemTimeToLocalTime(&SystemTime, &Time);
RtlTimeToTimeFields((INT64 *)&Time, (WORD *)&TimeFields, v5);
HalSetRealTimeClock(&TimeFields.Year);
v4 = SystemTime;
}
NewTime = v4;
LABEL_9:
PoNotifySystemTimeSet(&NewTime, &SystemTime, TimeChangeTimeZone);
}
}
}
}
ExReleaseResourceLite((PERESOURCE)((char *)&ExBootDevicesRemovedEvent + 384));
KeLeaveCriticalRegion();
}Referenced by:
CmCompleteRegistryInitialization
CmpFinishSystemHivesLoad