ExInitializeUtcTimeZoneBias
NTSTATUS __stdcall ExInitializeUtcTimeZoneBias(PLARGE_INTEGER a1){
_KSPIN_LOCK *v2;
NTSTATUS result;
_EX_TIMEZONE_STATE *ExTimeZoneState;
INT64 v5;
int v6;
int v7;
UINT8 v8;
UINT8 v9;
_LARGE_INTEGER v10;
_LARGE_INTEGER v11;
int v12;
int v13;
_LARGE_INTEGER v14;
int v15;
LONGLONG QuadPart;
_LARGE_INTEGER v17;
_LARGE_INTEGER SystemTime;
_LARGE_INTEGER v19;
int v20;
int v21;
_LARGE_INTEGER v22;
_QWORD TimeFields[3];
_RTL_DYNAMIC_TIME_ZONE_INFORMATION TimeZoneInformation;
v17.QuadPart = 0i64;
SystemTime.QuadPart = 0i64;
memset(&TimeZoneInformation, 0i64, sizeof(TimeZoneInformation));
*(_OWORD *)&TimeFields[1] = 0i64;
if( !*(&stru_140CF2E80 + 1829) )
return -1073741637;
ExTimeZoneState = PsGetCurrentServerSiloGlobals(v2)->ExTimeZoneState;
result = RtlQueryDynamicTimeZoneInformation(&TimeZoneInformation);
if( result >= 0 )
{
v6 = TimeZoneInformation.tzi.Bias + TimeZoneInformation.tzi.DaylightBias;
v7 = TimeZoneInformation.tzi.Bias + TimeZoneInformation.tzi.StandardBias;
RtlTimeToTimeFields((INT64 *)a1, (WORD *)&TimeFields[1], v5);
if( TimeZoneInformation.tzi.StandardStart.Month
&& TimeZoneInformation.tzi.DaylightStart.Month
&& RtlCutoverTimeToSystemTime(&TimeZoneInformation.tzi.StandardStart, &SystemTime, a1, v8)
&& RtlCutoverTimeToSystemTime(&TimeZoneInformation.tzi.DaylightStart, &v17, a1, v9) )
{
v10.QuadPart = v17.QuadPart + 600000000i64 * v7;
v17 = v10;
v11.QuadPart = SystemTime.QuadPart + 600000000i64 * v6;
SystemTime = v11;
if( v10.QuadPart >= v11.QuadPart )
{
v19 = v11;
v12 = 1;
v21 = 1;
v13 = v7;
LODWORD(TimeFields[0]) = v6;
v14 = v11;
v22 = v10;
v7 = v6;
v11 = v10;
v15 = 2;
}
else
{
LODWORD(TimeFields[0]) = v7;
v12 = 2;
v21 = 2;
v13 = v6;
v19 = v10;
v14 = v10;
v22 = v11;
v15 = 1;
}
QuadPart = a1->QuadPart;
HIDWORD(TimeFields[0]) = v15;
v20 = v13;
if( QuadPart < v14.QuadPart || QuadPart >= v11.QuadPart )
{
ExTimeZoneState->CurrentTimeZoneId = v15;
v13 = v7;
ExTimeZoneState->LastTimeZoneBias = v7;
}
else
{
ExTimeZoneState->CurrentTimeZoneId = v12;
ExTimeZoneState->LastTimeZoneBias = v13;
}
ExTimeZoneState->TimeZoneBias.QuadPart = 600000000i64 * v13;
KUSER_SHARED_DATA.TimeZoneBiasStamp = 0;
ExpWriteTimeZoneBias((UINT64 *)&ExTimeZoneState->TimeZoneBias.QuadPart);
return 0;
}
else
{
return -1073741823;
}
}
return result;
}Referenced by:
No references.