NtSetSystemTime

INT64 __fastcall NtSetSystemTime(_LARGE_INTEGER *SystemTime, _LARGE_INTEGER *PreviousTime){
  INT8 v4; 
  __int64 v6; 
  LONGLONG QuadPart; 
  unsigned int v8; 
  char v9; 
  LARGE_INTEGER v10; 
  char HasCapability[8]; 
  union _LARGE_INTEGER SystemTimea; 
  LARGE_INTEGER NewTime; 
  union _LARGE_INTEGER Time; 
  UNICODE_STRING SourceString; 
  struct _TIME_FIELDS TimeFields; 
  SystemTimea.QuadPart = 0i64;
  NewTime.QuadPart = 0i64;
  Time.QuadPart = 0i64;
  TimeFields = 0i64;
  HasCapability[0] = 0;
  *(_QWORD *)&SourceString.Length = 2228256i64;
  SourceString.Buffer = L"systemManagement";
  if( SystemTime )
  {
    v4 = *((_BYTE *)KeGetCurrentThread() + 562);
    if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeSystemtimePrivilege, v4)
      && (RtlIsMultiSessionSku()
       || (int)RtlCapabilityCheck(0i64, &SourceString, (UINT8 *)HasCapability) < 0
       || !HasCapability[0])
      || PsIsCurrentThreadInServerSilo() )
    {
      return 3221225569i64;
    }
    if( v4 )
    {
      if( ((unsigned __int8)SystemTime & 3) != 0 )
        ExRaiseDatatypeMisalignment();
      v6 = 0x7FFFFFFF0000i64;
      if( PreviousTime )
      {
        if( ((unsigned __int8)PreviousTime & 3) != 0 )
          ExRaiseDatatypeMisalignment();
        if( (unsigned __int64)PreviousTime < 0x7FFFFFFF0000i64 )
          v6 = (__int64)PreviousTime;
        *(_BYTE *)v6 = *(_BYTE *)v6;
        *(_BYTE *)(v6 + 7) = *(_BYTE *)(v6 + 7);
      }
      QuadPart = SystemTime->QuadPart;
      NewTime = *SystemTime;
    }
    else
    {
      QuadPart = SystemTime->QuadPart;
      NewTime = *SystemTime;
    }
    if( HIDWORD(QuadPart) > 0x20000000 )
      return 3221225485i64;
    ExAcquireTimeRefreshLock(1u);
    ExpSetSystemTime(1, 0, 1, NewTime, (__int64 *)&SystemTimea);
    SeAuditSystemTimeChange(SystemTimea, NewTime);
    ExReleaseTimeRefreshLock();
    if( PreviousTime )
      *PreviousTime = SystemTimea;
    return 0;
  }
  if( PsIsCurrentThreadInServerSilo() )
  {
    ExAcquireTimeRefreshLock(1u);
    ExpRefreshTimeZoneInformation();
    ExReleaseTimeRefreshLock();
    return 0;
  }
  v8 = -1073741811;
  ExAcquireTimeRefreshLock(1u);
  v9 = ExpSystemIsInCmosMode;
  if( (unsigned __int8)HalQueryRealTimeClock(&TimeFields)
    && RtlTimeFieldsToTime(&TimeFields, &Time)
    && (unsigned __int8)ExpRefreshTimeZoneInformation() )
  {
    v10 = *(LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart;
    SystemTimea = *(union _LARGE_INTEGER *)&KUSER_SHARED_DATA.SystemTime.LowPart;
    if( !ExpRealTimeIsUniversal )
    {
      if( v9 )
      {
        ExLocalTimeToSystemTime(&Time, &NewTime);
        KeSetSystemTime(&NewTime, &SystemTimea, 0i64);
        goto LABEL_29;
      }
      ExSystemTimeToLocalTime(&SystemTimea, &Time);
      RtlTimeToTimeFields(&Time, &TimeFields);
      HalSetRealTimeClock(&TimeFields);
      v10 = SystemTimea;
    }
    NewTime = v10;
LABEL_29:
    PoNotifySystemTimeSet(&NewTime, &SystemTimea, 3ui64);
    v8 = 0;
  }
  ExReleaseTimeRefreshLock();
  return v8;
}

Referenced by:

ExpSetTimeZoneInformation