RtlpSetTimeZoneInformationWorker

INT64 __fastcall RtlpSetTimeZoneInformationWorker(
        _RTL_DYNAMIC_TIME_ZONE_INFORMATION *DynamicTimeZoneInformation,
        UINT64 TimeZoneInformationSize){
  wchar_t *StandardName; 
  unsigned int v3; 
  size_t v5; 
  int v6; 
  size_t v7; 
  BOOL v8; 
  int v9; 
  size_t v10; 
  int v11; 
  INT64 result; 
  int v13; 
  int *p_DynamicDaylightTimeDisabled; 
  UINT64 ValueLength; 
  UINT64 ValueLengtha; 
  UINT64 ValueLengthb; 
  int v18; 
  int DynamicDaylightTimeDisabled; 
  PCWSTR Path; 
  Path = 0i64;
  StandardName = DynamicTimeZoneInformation->tzi.StandardName;
  v3 = TimeZoneInformationSize;
  v5 = wcsnlen(DynamicTimeZoneInformation->tzi.StandardName, 0x20ui64);
  v6 = v5;
  if( v5 >= 0x20 )
    return 3221225485i64;
  v7 = wcsnlen(DynamicTimeZoneInformation->tzi.DaylightName, 0x20ui64);
  v9 = v7;
  if( v7 >= 0x20 )
    return 3221225485i64;
  if( v3 < 0x1B0 )
  {
    v11 = 0;
  }
  else
  {
    v10 = wcsnlen(DynamicTimeZoneInformation->TimeZoneKeyName, 0x80ui64);
    v11 = v10;
    if( v10 >= 0x80 )
      return 3221225485i64;
  }
  LOBYTE(v8) = 1;
  LODWORD(result) = RtlpGetTimeZoneInfoHandle(v8, (PHANDLE)&Path);
  if( (int)result >= 0 )
  {
    LODWORD(ValueLength) = 4;
    if( (int)RtlWriteRegistryValue(0x40000000ui64, Path, L"Bias", 4ui64, DynamicTimeZoneInformation, ValueLength) < 0
      || (LODWORD(ValueLengtha) = 2 * v6 + 2,
          (int)RtlWriteRegistryValue(0x40000000ui64, Path, L"StandardName", 1ui64, StandardName, ValueLengtha) < 0)
      || (LODWORD(ValueLengtha) = 4,
          (int)RtlWriteRegistryValue(
                 0x40000000ui64,
                 Path,
                 L"StandardBias",
                 4ui64,
                 &DynamicTimeZoneInformation->tzi.StandardBias,
                 ValueLengtha) < 0)
      || (LODWORD(ValueLengtha) = 16,
          (int)RtlWriteRegistryValue(
                 0x40000000ui64,
                 Path,
                 L"StandardStart",
                 3ui64,
                 &DynamicTimeZoneInformation->tzi.StandardStart,
                 ValueLengtha) < 0)
      || (LODWORD(ValueLengtha) = 2 * v9 + 2,
          (int)RtlWriteRegistryValue(
                 0x40000000ui64,
                 Path,
                 L"DaylightName",
                 1ui64,
                 DynamicTimeZoneInformation->tzi.DaylightName,
                 ValueLengtha) < 0)
      || (LODWORD(ValueLengtha) = 4,
          (int)RtlWriteRegistryValue(
                 0x40000000ui64,
                 Path,
                 L"DaylightBias",
                 4ui64,
                 &DynamicTimeZoneInformation->tzi.DaylightBias,
                 ValueLengtha) < 0)
      || (LODWORD(ValueLengtha) = 16,
          (int)RtlWriteRegistryValue(
                 0x40000000ui64,
                 Path,
                 L"DaylightStart",
                 3ui64,
                 &DynamicTimeZoneInformation->tzi.DaylightStart,
                 ValueLengtha) < 0)
      || v3 < 0x1B0 )
    {
      LODWORD(ValueLengtha) = 2;
      LOWORD(v18) = 0;
      v13 = RtlWriteRegistryValue(0x40000000ui64, Path, L"TimeZoneKeyName", 1ui64, &v18, ValueLengtha);
      if( v13 >= 0 )
      {
        DynamicDaylightTimeDisabled = DynamicTimeZoneInformation->DynamicDaylightTimeDisabled;
        p_DynamicDaylightTimeDisabled = &DynamicDaylightTimeDisabled;
        goto LABEL_21;
      }
    }
    else
    {
      LODWORD(ValueLengtha) = 2 * v11 + 2;
      v13 = RtlWriteRegistryValue(
              0x40000000ui64,
              Path,
              L"TimeZoneKeyName",
              1ui64,
              DynamicTimeZoneInformation->TimeZoneKeyName,
              ValueLengtha);
      if( v13 >= 0 )
      {
        v18 = DynamicTimeZoneInformation->DynamicDaylightTimeDisabled;
        p_DynamicDaylightTimeDisabled = &v18;
LABEL_21:
        LODWORD(ValueLengthb) = 4;
        v13 = RtlWriteRegistryValue(
                0x40000000ui64,
                Path,
                L"DynamicDaylightTimeDisabled",
                4ui64,
                p_DynamicDaylightTimeDisabled,
                ValueLengthb);
      }
    }
    ZwClose((HANDLE)Path);
    return(unsigned int)v13;
  }
  return result;
}

Referenced by:

ExpRefreshTimeZoneInformation
ExpSetTimeZoneInformation
RtlSetDynamicTimeZoneInformation
RtlSetTimeZoneInformation