ExpSetTimeZoneInformation
INT64 __fastcall ExpSetTimeZoneInformation(VOID *SystemInformation, UINT64 SystemInformationLength){
int v2;
bool SiloTimeZoneMarker;
__int64 v5;
char *v6;
_RTL_DYNAMIC_TIME_ZONE_INFORMATION *p_ValueData;
__int64 v8;
_OWORD *v9;
_RTL_DYNAMIC_TIME_ZONE_INFORMATION *p_DynamicTimeZoneInformation;
INT64 result;
int v12;
_RTL_DYNAMIC_TIME_ZONE_INFORMATION ValueData;
_RTL_DYNAMIC_TIME_ZONE_INFORMATION DynamicTimeZoneInformation;
v2 = SystemInformationLength;
memset((INT64)&ValueData, 0i64);
SiloTimeZoneMarker = 0;
if( v2 == 172 )
{
v5 = 3i64;
if( ((unsigned __int8)SystemInformation & 3) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)SystemInformation + 172 > 0x7FFFFFFF0000i64
|| (char *)SystemInformation + 172 < SystemInformation )
{
MEMORY[0x7FFFFFFF0000] = 0;
}
*(_OWORD *)&ValueData.tzi.Bias = *(_OWORD *)SystemInformation;
*(_OWORD *)&ValueData.tzi.StandardName[6] = *((_OWORD *)SystemInformation + 1);
*(_OWORD *)&ValueData.tzi.StandardName[14] = *((_OWORD *)SystemInformation + 2);
*(_OWORD *)&ValueData.tzi.StandardName[22] = *((_OWORD *)SystemInformation + 3);
*(_OWORD *)&ValueData.tzi.StandardName[30] = *((_OWORD *)SystemInformation + 4);
*(_OWORD *)&ValueData.tzi.StandardStart.Milliseconds = *((_OWORD *)SystemInformation + 5);
*(_OWORD *)&ValueData.tzi.DaylightName[4] = *((_OWORD *)SystemInformation + 6);
*(_OWORD *)&ValueData.tzi.DaylightName[12] = *((_OWORD *)SystemInformation + 7);
v6 = (char *)SystemInformation + 128;
*(_OWORD *)&ValueData.tzi.DaylightName[20] = *(_OWORD *)v6;
*(_OWORD *)&ValueData.tzi.DaylightName[28] = *((_OWORD *)v6 + 1);
*(_QWORD *)&ValueData.tzi.DaylightStart.Minute = *((_QWORD *)v6 + 4);
ValueData.tzi.DaylightBias = *((_DWORD *)v6 + 10);
memset((INT64)ValueData.TimeZoneKeyName, 0i64);
ValueData.DynamicDaylightTimeDisabled = 1;
}
else
{
if( v2 != 432 )
return 3221225476i64;
v5 = 3i64;
if( ((unsigned __int8)SystemInformation & 3) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)SystemInformation + 432 > 0x7FFFFFFF0000i64
|| (char *)SystemInformation + 432 < SystemInformation )
{
MEMORY[0x7FFFFFFF0000] = 0;
}
p_ValueData = &ValueData;
v8 = 3i64;
do
{
*(_OWORD *)&p_ValueData->tzi.Bias = *(_OWORD *)SystemInformation;
*(_OWORD *)&p_ValueData->tzi.StandardName[6] = *((_OWORD *)SystemInformation + 1);
*(_OWORD *)&p_ValueData->tzi.StandardName[14] = *((_OWORD *)SystemInformation + 2);
*(_OWORD *)&p_ValueData->tzi.StandardName[22] = *((_OWORD *)SystemInformation + 3);
*(_OWORD *)&p_ValueData->tzi.StandardName[30] = *((_OWORD *)SystemInformation + 4);
*(_OWORD *)&p_ValueData->tzi.StandardStart.Milliseconds = *((_OWORD *)SystemInformation + 5);
*(_OWORD *)&p_ValueData->tzi.DaylightName[4] = *((_OWORD *)SystemInformation + 6);
p_ValueData = (_RTL_DYNAMIC_TIME_ZONE_INFORMATION *)((char *)p_ValueData + 128);
*(_OWORD *)&p_ValueData[-1].TimeZoneKeyName[122] = *((_OWORD *)SystemInformation + 7);
SystemInformation = (char *)SystemInformation + 128;
--v8;
}
while( v8 );
*(_OWORD *)&p_ValueData->tzi.Bias = *(_OWORD *)SystemInformation;
*(_OWORD *)&p_ValueData->tzi.StandardName[6] = *((_OWORD *)SystemInformation + 1);
*(_OWORD *)&p_ValueData->tzi.StandardName[14] = *((_OWORD *)SystemInformation + 2);
}
ExAcquireTimeRefreshLock(1u);
v9 = (_OWORD *)PsGetCurrentServerSiloGlobals()[133];
p_DynamicTimeZoneInformation = &DynamicTimeZoneInformation;
do
{
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.Bias = *v9;
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.StandardName[6] = v9[1];
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.StandardName[14] = v9[2];
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.StandardName[22] = v9[3];
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.StandardName[30] = v9[4];
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.StandardStart.Milliseconds = v9[5];
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.DaylightName[4] = v9[6];
p_DynamicTimeZoneInformation = (_RTL_DYNAMIC_TIME_ZONE_INFORMATION *)((char *)p_DynamicTimeZoneInformation + 128);
*(_OWORD *)&p_DynamicTimeZoneInformation[-1].TimeZoneKeyName[122] = v9[7];
v9 += 8;
--v5;
}
while( v5 );
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.Bias = *v9;
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.StandardName[6] = v9[1];
*(_OWORD *)&p_DynamicTimeZoneInformation->tzi.StandardName[14] = v9[2];
ExReleaseResourceLite(&ExpTimeRefreshLock);
KeLeaveCriticalRegion();
if( !PsIsCurrentThreadInServerSilo()
|| (SiloTimeZoneMarker = ExpReadSiloTimeZoneMarker())
|| (LODWORD(result) = ExpWriteSiloTimeZoneMarker(1u), (int)result >= 0) )
{
v12 = RtlpSetTimeZoneInformationWorker(&ValueData, 0x1B0ui64);
if( v12 >= 0 )
v12 = NtSetSystemTime(0i64, 0i64);
if( v12 < 0 )
{
RtlpSetTimeZoneInformationWorker(&DynamicTimeZoneInformation, 0x1B0ui64);
if( PsIsCurrentThreadInServerSilo() )
{
if( !SiloTimeZoneMarker )
ExpWriteSiloTimeZoneMarker(0);
}
}
return(unsigned int)v12;
}
return result;
}Referenced by:
NtSetSystemInformation