Encontre o processo do Windows que está mudando o tempo de volta 1 hora

2

Eu tenho uma máquina windows que mudará periodicamente a hora do sistema, por razões desconhecidas. Parece acontecer a cada hora.

Esta máquina Windows é uma máquina virtual (Parallels Desktop 9, Win7 guest, host OSX). Ele tem um serviço NTP ( NetTime ) em execução que corrige prontamente o erro, mas nesses breves segundos entre a alteração e a correção, isso causa problemas .

Eu verifiquei:

  • a sincronização de horário da VM está desativada
  • O "Horário da Internet" do Windows está desativado
  • O serviço de tempo do Windows está desativado
  • Eu só tenho um único cliente NTP em execução, atualizando a cada 15 minutos

Existe uma complicação. Nós administramos um serviço de astronomia durante a noite. Para evitar problemas decorrentes de alterações automáticas do horário de verão, desabilitamos as alterações automáticas do horário de verão e definimos manualmente o fuso horário da máquina no final do dia para uma zona com o deslocamento correto. Por exemplo, na Espanha é DST agora. A hora padrão é UTC + 1, DST é UTC + 2. Na manhã seguinte à alteração do horário de verão, definimos o fuso horário da máquina como Grécia UTC + 2. A máquina host está configurada normalmente (fuso horário correto, alterações automáticas do horário de verão). A complicação é que o relógio muda de volta para a hora atual em UTC + 1 (horário pré-horário de verão).

ALGUM processo está mudando isso. Possivelmente, tem a sua própria configuração de fuso horário. Mas eu não consegui rastreá-lo. As alterações são registradas no log do sistema. Existem duas entradas principais: quando a hora é definida incorretamente e quando é corrigida:
(Divulgaçãocompleta,ologdeeventoséfiltradoporIDdoevento=1,masosoutroseventosparecemsemsentido).

Éinteressantecomoissoaconteceregularmente(acadahora,asegunda).Oqueémaisinteressanteéqueestassãohorasdetempodeatividade.EupossoassistirosistemaUpTimenoGerenciadordeTarefas,equandoelepassamaisdeumahora,orelógiomuda.

Tambéméinteressanteobservarosdetalhesdoevento:

-<Eventxmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    - <System> 
        <Provider Name="Microsoft-Windows-Kernel-General" Guid="{GUID}" /> 
        <EventID>1</EventID> 
        <Version>0</Version> 
        <Level>4</Level> 
        <Task>0</Task> 
        <Opcode>0</Opcode> 
        <Keywords>0x8000000000000010</Keywords> 
        <TimeCreated SystemTime="2018-04-18T00:31:28.500000000Z" /> 
        <EventRecordID>500706</EventRecordID> 
        <Correlation /> 
        <Execution ProcessID="4" ThreadID="56" /> 
        <Channel>System</Channel> 
        <Computer>T07-VM-GUEST</Computer> 
        <Security UserID="SID" /> 
    </System> 
    - <EventData> 
        <Data Name="NewTime">2018-04-18T00:31:28.500000000Z</Data> 
        <Data Name="OldTime">2018-04-18T01:31:28.861800000Z</Data> 
    </EventData> 
</Event>

Podemos ver que este evento muda de 01:31 para 00:31 (hora UTC, 03:31 para 02:31 local como visto no log de eventos). O que é particularmente interessante é esta linha:

<Execution ProcessID="4" ThreadID="56" /> 

O PID 4 é o processo System :

Usando o ProcessExplorer, posso inspecionar o processo do Sistema (PID 4) e posso ver alguns detalhes sobre o ThreadId 56 (assumindo que eles não são reciclados e estou olhando para o correto):

Mas é tudo sem sentido para mim. A única coisa significativa que posso ver aqui é a Hora de início e como ela se relaciona com os horários dos eventos de alteração do relógio (como eu disse acima, a cada hora em sincronia com o Uptime).

Esta resposta fala sobre como encontrar alterações no registro de segurança, e todas as alterações iniciadas pelo serviço NetTime estão lá . Mas as mudanças problemáticas estão faltando de maneira suspeita:

Estou correto em minha análise e, em caso afirmativo, por que o processo do sistema está alterando o relógio do meu sistema a cada hora?

    
por Ian 18.04.2018 / 04:38

2 respostas

1

Ok, como todos os piores tipos de problemas, este tem duas partes.

  1. O Windows atualiza a hora do sistema a cada hora para o relógio do hardware. (Observe que também faz isso na inicialização, o que acelerou o teste)
  2. O Parallels estava virtualizando o relógio do hardware incorretamente. Eu tenho que dizer que estou usando uma versão antiga do Parallels (PD9), eu espero que eles tenham consertado isso agora.

Eu não encontrei nenhuma declaração definitiva sobre isso, mas eu vi muitas pessoas no meu lugar confirmando a mesma coisa: a cada hora o Windows lê o Real Time Clock (RTC, ou o clock do hardware no BIOS) e re-sincronizando com ele. Veja as referências: # 1 , # 2 , # 3 , # 4 .

Obviamente, a maioria deles tem a ver com defeitos no RTC, baterias de BIOS simples ou inicialização dupla com um sistema operacional * nix (que armazena o UTC no RTC, não o horário local). Mas o fato é que o Windows fará isso a cada hora. Ainda não encontrei uma maneira de desabilitar isso.

Além disso, o Parallels não mantém um relógio de hardware per se, em vez disso, ele mantém um deslocamento (do horário do sistema) no arquivo de configuração da VM. O problema é que esse deslocamento não leva em conta corretamente o horário de verão. Por exemplo, eu tenho um host Mac em Madri, na Espanha, que normalmente é UTC + 1, mas atualmente no horário de verão é UTC + 2. Quando defino a hora na minha máquina convidada, o Parallels calcula a diferença entre o horário do meu convidado e o fuso horário do host SEM DST.

Vamos fazer um exemplo:
Hora atual é UTC 00:00.
O horário padrão de Madri seria UTC + 1, então 01:00. Exceto é atualmente DST, UTC + 2, 02:00. Eu configurei minha máquina convidada para 02:00, o Windows tenta gravar isso no RTC, o Parallels calcula a diferença entre meu horário de convidado e o Padrão de Madri (01:00) e salva <TimeShift>-3600</TimeShift> no arquivo de configuração (o arquivo só é atualizado reinicialização, imagino que essa variável seja rastreada na memória durante o tempo de execução). Assim, toda vez que o Windows lê o RTC (o Parallels lê a hora do sistema host), ele acha que o RTC está configurado para o HostTime-3600s (-1 hr) e atualiza o horário.

Eu sei que minha máquina de convidado tem uma configuração complicada (configurada manualmente no Cairo para encontrar um fuso horário sem DST), achei que daria à Parallels o benefício da dúvida e verificaria se ela funcionava corretamente com guest e host configurados como o fuso horário correto (Madri com DST). Não, ainda está estragado.

Solução:
Eu não consigo encontrar uma maneira de desativar o Windows de ler o RTC a cada hora, então, por enquanto, eu forcei a máquina host a usar um fuso horário que não usa DST (por exemplo, Cairo, UTC + 2). Isso funciona. Quando eu salvo meu horário de convidado para 02:00, e o horário do Cairo (UTC + 2) é 02:00, o Parallels salva <TimeShift>0</TimeShift> .

Feio.

    
por 23.04.2018 / 06:41
0

Existem duas vezes disponíveis para o software, a hora do sistema e a hora local. A hora do sistema não deve ser atualizada, independentemente da configuração do horário de verão. Hora local é o que é ajustado. Se este não for o caso, então há um erro de programação no seu sistema operacional ou, mais provavelmente, no aplicativo. pode ser que a aplicação esteja usando, e. GetLocalTime () quando deveria estar usando GetSystemTime () e a interface do usuário está erroneamente declarando que é a hora do sistema.

    
por 28.08.2018 / 01:48