RtlCutoverTimeToSystemTime
UINT8 __stdcall RtlCutoverTimeToSystemTime(
_TIME_FIELDS *CutoverTime,
_LARGE_INTEGER *SystemTime,
_LARGE_INTEGER *CurrentSystemTime,
UINT8 ThisYear){
__int16 Day;
__int16 Month;
__int16 Weekday;
__int16 v9;
__int16 Milliseconds;
__int16 v11;
__int16 v12;
struct _TIME_FIELDS TimeFields;
struct _TIME_FIELDS v15;
union _LARGE_INTEGER Time;
TimeFields = 0i64;
RtlTimeToTimeFields(CurrentSystemTime, &TimeFields);
if( !CutoverTime->Year )
{
Day = CutoverTime->Day;
Time.QuadPart = 0i64;
v15 = 0i64;
if( Day <= 5 )
{
if( Day )
{
Month = CutoverTime->Month;
Weekday = CutoverTime->Weekday;
v9 = 1;
TimeFields.Hour = CutoverTime->Hour;
TimeFields.Minute = CutoverTime->Minute;
TimeFields.Second = CutoverTime->Second;
Milliseconds = CutoverTime->Milliseconds;
TimeFields.Month = Month;
TimeFields.Milliseconds = Milliseconds;
TimeFields.Day = 1;
TimeFields.Weekday = 0;
if( RtlTimeFieldsToTime(&TimeFields, &Time) )
{
RtlTimeToTimeFields(&Time, &v15);
if( v15.Weekday <= Weekday )
{
v11 = 1;
if( v15.Weekday >= Weekday )
{
LABEL_8:
v12 = 1;
if( Day > 1 )
{
do
{
v9 += 7;
TimeFields.Day = v9;
if( !RtlTimeFieldsToTime(&TimeFields, &Time) )
break;
RtlTimeToTimeFields(&Time, &v15);
v11 = v15.Day;
++v12;
}
while( v12 < Day );
}
TimeFields.Day = v11;
if( RtlTimeFieldsToTime(&TimeFields, &Time) )
{
*SystemTime = Time;
return 1;
}
return 0;
}
v9 = Weekday - v15.Weekday + 1;
}
else
{
v9 = Weekday - v15.Weekday + 8;
}
v11 = v9;
goto LABEL_8;
}
}
}
return 0;
}
return RtlTimeFieldsToTime(CutoverTime, SystemTime) != 0;
}Referenced by:
ExInitializeUtcTimeZoneBias
ExpRefreshTimeZoneInformation