ExInitializeUtcTimeZoneBias
INT64 __fastcall ExInitializeUtcTimeZoneBias(LARGE_INTEGER *SystemTime){
INT64 v2;
__int64 v3;
int v4;
int v5;
UINT8 v6;
UINT8 v7;
union _LARGE_INTEGER v8;
union _LARGE_INTEGER v9;
int v10;
int v11;
union _LARGE_INTEGER v12;
int v13;
LONGLONG QuadPart;
union _LARGE_INTEGER v15;
union _LARGE_INTEGER SystemTimea;
union _LARGE_INTEGER v17;
int v18;
int v19;
union _LARGE_INTEGER v20;
_QWORD TimeFields[3];
_RTL_DYNAMIC_TIME_ZONE_INFORMATION result;
v15.QuadPart = 0i64;
SystemTimea.QuadPart = 0i64;
memset((INT64)&result, 0i64);
*(_OWORD *)&TimeFields[1] = 0i64;
if( !ExpRealTimeIsUniversal )
return 3221225659i64;
v3 = PsGetCurrentServerSiloGlobals()[133];
v2 = RtlQueryDynamicTimeZoneInformation(&result);
if( (int)v2 >= 0 )
{
v4 = result.tzi.Bias + result.tzi.DaylightBias;
v5 = result.tzi.Bias + result.tzi.StandardBias;
RtlTimeToTimeFields(SystemTime, (PTIME_FIELDS)&TimeFields[1]);
if( result.tzi.StandardStart.Month
&& result.tzi.DaylightStart.Month
&& RtlCutoverTimeToSystemTime(&result.tzi.StandardStart, &SystemTimea, SystemTime, v6)
&& RtlCutoverTimeToSystemTime(&result.tzi.DaylightStart, &v15, SystemTime, v7) )
{
v8.QuadPart = v15.QuadPart + 600000000i64 * v5;
v15 = v8;
v9.QuadPart = SystemTimea.QuadPart + 600000000i64 * v4;
SystemTimea = v9;
if( v8.QuadPart >= v9.QuadPart )
{
v17 = v9;
v10 = 1;
v19 = 1;
v11 = v5;
LODWORD(TimeFields[0]) = v4;
v12 = v9;
v20 = v8;
v5 = v4;
v9 = v8;
v13 = 2;
}
else
{
LODWORD(TimeFields[0]) = v5;
v10 = 2;
v19 = 2;
v11 = v4;
v17 = v8;
v12 = v8;
v20 = v9;
v13 = 1;
}
QuadPart = SystemTime->QuadPart;
HIDWORD(TimeFields[0]) = v13;
v18 = v11;
if( QuadPart < v12.QuadPart || QuadPart >= v9.QuadPart )
{
*(_DWORD *)(v3 + 432) = v13;
v11 = v5;
*(_DWORD *)(v3 + 436) = v5;
}
else
{
*(_DWORD *)(v3 + 432) = v10;
*(_DWORD *)(v3 + 436) = v11;
}
*(_QWORD *)(v3 + 440) = 600000000i64 * v11;
KUSER_SHARED_DATA.TimeZoneBiasStamp = 0;
ExpWriteTimeZoneBias((UINT64 *)(v3 + 440));
return 0i64;
}
else
{
return 3221225473i64;
}
}
return v2;
}Referenced by:
Phase1InitializationDiscard