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.