Ciao a tutti!

L’anno scorso avevamo parlato nel dettaglio del Windows Time Service in questo post.

Recentemente ci è capitato di dover affrontare un singolare problema su questa tecnologia, di non banale risoluzione. Vale quindi la pena di approfondire l’argomento con tutti voi.

Introduzione – Windows Time Providers

Come già discusso nel post precedente, ogni macchina Windows può ricevere l’orario dal dominio in cui si trova (NT5DS) oppure sincronizzarsi direttamente con una fonte di Time esterna. In questo secondo caso, la macchina non fa altro che utilizzare un Time Provider.

Il Time Provider è il componente responsabile di ottenere un campione di tempo da una qualsiasi fonte (Hardware o Network), e di passarlo al servizio W32time che lo gestirà sulla macchina locale. Si identifica, a livello di Windows, come una suite di protocollo utilizzato + la DLL che lo gestisce.

NTP provider è il time provider di default su Windows, compatibile con il protocollo NTP versione 3 client e server, e può interagire con client e server SNTP per retrocompatibilità con Windows 2000 e altri client SNTP.

I settaggi del Windows Time Service sono contenuti nella chiave di registro HKLM/SYSTEM/CurrentControlSet/Services/W32Time/Parameters

image

Mentre sotto HKLM/SYSTEM/CurrentControlSet/Services/W32Time/TimeProviders ci sono tutte le sottochiavi con i parametri relativi ai Time Providers, tra cui NTPclient e NTPserver (che sono gestiti in modo separato, proprio come ad esempio LanmanServer e LanmanWorkstation )

Scenario Pratico

Fatta la doverosa introduzione teorica, passiamo al problema reale che abbiamo affrontato. Semplicemente, l’Event Viewer di una macchina Windows 2003 era inondato di eventi di errore del tipo:

image

Tuttavia, il servizio Application Experience Lookup non aveva nessun tipo di problema!!! Inoltre, il Win32time funzionava perfettamente, con orario sincronizzato al dominio.

La cosa più strana era che il messaggio di errore si presentava in modo completamente diverso, se leggevamo lo stesso file event log da una macchina Windows 7.

image

La parola threshhold con l’errore di ortografia (due H consecutive) ci ha fatti insospettire. Inoltre non esiste in Windows alcun Windows Time Agent, o Windows Time Control Panel, e l’indirizzo IP menzionato nell’evento non aveva nulla a che fare con l’infrastruttura di dominio. A seguito di alcune analisi, si è poi scoperto che su questa macchina era stato installato un Time Provider di terze parti - come verificabile anche nel registry.

 

image

Il time provider si aspettava di sincronizzarsi con uno specifico server (10.0.0.1 – IP fittizio) ma poichè la macchina era in dominio, prendeva l’orario dal proprio Domain Controller, e questo sollevava una differenza con l’orario di 10.0.0.1.

Inoltre, tale componente non era stato opportunamente compilato, e quindi sollevava un evento che veniva malinterpretato e gestito con il messaggio di errore di default per eventID 1 su Windows 2003 (quello relativo a "The application experience lookup service failed to initialize") anche se aveva un contenuto totalmente differente.

Lato Windows invece, ogni funzionalità di dominio e di Windows Time Service era assolutamente attiva e senza problemi.

Il problema era quindi esclusivamente del componente di terze parti, ed è stato risolto rimuovendo tale Time Provider. Si sarebbe potuto gestire correttamente anche facendolo puntare all’indirizzo del Domain Controller di riferimento, con il quale la macchina era sicuramente in sincronia.

Grazie per l’attenzione e alla prossima!

Stefano Gagliardi
Support Engineer
Microsoft Enterprise Platform Support