EN FR Home

Windows Time Troubleshooting

The canonical W32Time / Active Directory hub — decode the status, fix the PDC emulator, escape the VM trap

1. Why Windows time is different from a Linux daemon

Three differences trip up admins who come from chrony/ntpd:

  • W32Time is not an NTP daemon by default. On a domain member it runs as the NT5DS provider, following the domain hierarchy, not a server list you chose. It speaks the NTP wire protocol but its policy is Active Directory.
  • Time has a security role. Kerberos rejects authentication when the client and server clocks differ by more than the allowed skew — 5 minutes by default (MaxClockSkew). A drifting clock does not just mis-stamp logs; it locks users out.
  • There is a designated source of truth. The PDC emulator of the forest-root domain is the authoritative clock for the entire forest. Everything else chains back to it.

2. Decode w32tm /query /status field by field

> w32tm /query /status
Leap Indicator: 0(no warning)
Stratum: 4 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0312500s
Root Dispersion: 7.7902343s
ReferenceId: 0xC0A80001 (source IP:  192.168.0.1)
Last Successful Sync Time: 6/19/2026 9:14:02 AM
Source: dc01.corp.example.com
Poll Interval: 10 (1024s)
FieldWhat it tells you
Leap IndicatorLeap-second warning state. 0(no warning) is normal; 3(not synchronized) means the clock is unsynchronized — a red flag.
StratumDistance from the reference clock. A member is typically stratum 3–5. Stratum 0 in W32Time output means unspecified/unsynchronized — the machine has no source.
PrecisionClock resolution as a power of two seconds. Informational; not a fault signal on its own.
Root Delay / Root DispersionRound-trip delay to, and accumulated error bound from, the root reference. A large, growing Root Dispersion signals a degrading or lost source.
ReferenceIdThe source the clock is locked to, as an IP or a 4-char code. LOCL / 0x4C4F434C ("Local CMOS Clock") means it gave up and is free-running.
Last Successful Sync TimeThe single most useful field. If it is hours or days old, the machine is not currently synchronized, whatever the config says.
SourceWho it is syncing from. Should be a DC (on a member) or your external NTP (on the PDC emulator). Free-running System Clock or Local CMOS Clock = not synced.
Poll IntervalSeconds between polls (shown as a power of two). On NT5DS this is managed; a stuck small value can indicate repeated re-sync attempts.

3. Decode /query /configuration — Type and flags

w32tm /query /status tells you the live state; /query /configuration tells you the intended policy. The decisive field is Type:

TypeMeaning
NT5DSFollow the Active Directory domain hierarchy. Correct for every domain member and every DC except the forest-root PDC emulator.
NTPUse the explicit NtpServer manual peer list. Correct for the forest-root PDC emulator, and for standalone (non-domain) machines.
NoSyncThe service runs but never synchronizes. Almost always wrong unless deliberate.
AllSyncUse all available providers (NTP and domain hierarchy). Rare; usually a sign of confusion.

The NtpServer entry carries per-peer flags appended as ,0x…. They combine bitwise:

FlagNameEffect
0x01SpecialIntervalPoll at the fixed SpecialPollInterval instead of the adaptive interval.
0x02UseAsFallbackOnlyOnly use this peer if the others fail.
0x04SymmetricActiveUse NTP symmetric active mode (peer, not client).
0x08ClientUse NTP client mode — the normal value for an upstream server.

A typical PDC emulator line reads time.nist.gov,0x9 — that is 0x08 (client) + 0x01 (special interval): client mode, fixed poll.

4. The Active Directory time hierarchy & PDC emulator

This is the model that explains 80% of "domain time is wrong" tickets. Time flows down a fixed chain:

   ┌─────────────────────────────────────────────┐
   │  External UTC source (GNSS / NTP / NTS)       │
   └───────────────────┬───────────────────────────┘
                       │  Type=NTP, /reliable:yes
                       ▼
   ┌─────────────────────────────────────────────┐
   │  PDC emulator — FOREST ROOT domain            │  ← the one authoritative clock
   └───────────────────┬───────────────────────────┘
                       │  domain hierarchy (NT5DS)
                       ▼
   ┌─────────────────────────────────────────────┐
   │  PDC emulator — each child domain             │
   └───────────────────┬───────────────────────────┘
                       │  NT5DS
                       ▼
   ┌─────────────────────────────────────────────┐
   │  Other domain controllers                     │
   └───────────────────┬───────────────────────────┘
                       │  NT5DS
                       ▼
   ┌─────────────────────────────────────────────┐
   │  Member servers & workstations                │
   └─────────────────────────────────────────────┘

5. Diagnose by symptom (decision tree)

SymptomMost likely causeWhere to go
"No time data was available" on resyncSource unreachable, or member can't reach a DC§9 stripchart + firewall / port 123
One member drifting, rest fineMember wrongly set to NTP type or pointing externally§3 — reset to NT5DS (§8)
Whole domain wrong by the same offsetForest-root PDC emulator source is wrong or unreachable§4 + §8 PDC fix
Source shows Local CMOS Clock, stratum 0No usable source at all — unsynchronizedstratum 16 / no-sync diagnosis
Time jumps, recovers, jumps again (VM)Hypervisor host-sync fighting W32Time§5 VM note below

6. The accuracy you can actually expect

Set expectations honestly before promising an SLA. Microsoft's supported bounds:

TargetCondition
~1 secondThe rough working tolerance of a default domain — a practical expectation, not a guaranteed SLA. Out of the box, domain time is bounded by the Kerberos 5-minute skew, not a tight one-second contract.
50 msA documented high-accuracy target (Windows Server 2016+) with reasonable network conditions and the Windows Time service correctly configured.
1 msWindows Server 2016 or later only, and only with a short low-latency path to the source, a shallow stratum, few network hops, and the high-accuracy registry tuning applied.

7. W32Time Event IDs decoder

From the System event log, source Time-Service (W32Time). The ones worth memorising:

EventTypical meaning
12Time Provider NtpClient: the machine is configured to use the domain hierarchy. On a forest-root PDC emulator this is the prompt to configure a reliable external source instead. Informational/warning, not a fault on a normal member.
29NtpClient has no source of accurate time and could not reach a manually configured peer. Common after a misconfigured manual peer list.
36Too much time has passed since the last successful sync; the clock is no longer reliable.
47No valid response from a manually configured peer — it is not answering usably on UDP 123.
50Time difference too large to correct, or loss of sync — W32Time stopped correcting.
129NtpClient could not reach a domain peer / domain-hierarchy discovery error — the NT5DS chain is broken.
134NtpClient could not reach a manually configured peer because of a DNS resolution failure — very common, and easy to miss: the peer name doesn't resolve.

8. Fix recipes (AD-specific)

For the full syntax of each command, see the w32tm command reference. These are the AD-specific procedures:

Reset a member wrongly set to external NTP → back to NT5DS

> w32tm /config /syncfromflags:domhier /update
> net stop w32time && net start w32time
> w32tm /resync /force

Configure the forest-root PDC emulator (the only external source)

> w32tm /config /manualpeerlist:"time.cloudflare.com,0x8 ntp.rdem-systems.com,0x8" ^
        /syncfromflags:manual /reliable:yes /update
> net stop w32time && net start w32time
> w32tm /resync /force

Full reset when the configuration is corrupted

:: Unregister and re-register the service, then reconfigure
> net stop w32time
> w32tm /unregister
> w32tm /register
> net start w32time
> w32tm /resync /force

9. Verify the fix

Measure the offset to the intended source directly — don't trust the config alone:

:: Compare this machine's clock against its source, 5 samples
> w32tm /stripchart /computer:dc01.corp.example.com /samples:5 /dataonly

A healthy result shows small, stable offsets (tens of milliseconds on a LAN). Then confirm the server you depend on is itself answering correctly with the NTP server checker, and re-run w32tm /query /status to see a fresh Last Successful Sync Time.

After the fix — related sites: