The Windows Time Service (W32Time)
How W32Time keeps every computer in a domain on the same clock, why only the forest root PDC emulator is meant to reach outside the organisation for time, and the w32tm commands to configure and verify it.
The Windows service that synchronizes the system clock using NTP, installed by default on every Windows computer.
The command-line tool used to configure, query, and troubleshoot the Windows Time service.
The one domain controller per forest that’s supposed to look outside Active Directory for the correct time.
What Is the Windows Time Service?
W32Time is the service that keeps a Windows computer’s clock accurate, using the Network Time Protocol to compare the local clock against a trusted source and correct drift before it becomes a problem. It’s implemented in W32Time.dll, installed by default in %Systemroot%\System32, and it runs on every edition of Windows and Windows Server going back to Windows 2000.
Think of W32Time as a clock inspector built into every Windows computer: it quietly checks the time against a trusted authority on a schedule and nudges the local clock back into line, so nobody ever has to notice or intervene.
The service was originally built to satisfy Kerberos V5, which requires clocks on a network to stay closely synchronized before it will authenticate a request. Since then, plenty of other things have come to depend on it too — event log timestamps, certificate validity checks, scheduled tasks, and any line-of-business application that timestamps a transaction.
How the Domain Time Hierarchy Works
A domain-joined computer doesn’t pick its own time source. Active Directory imposes a hierarchy, and by default every computer in it follows the same chain of command:
All client desktops and member servers nominate their authenticating domain controller as their inbound time partner. All domain controllers in a domain nominate the PDC emulator operations master as their inbound time partner. In a multi-domain forest, PDC emulators in child domains follow the domain hierarchy up toward the forest root. The PDC emulator at the root of the forest sits at the top of the chain and becomes authoritative for the entire organisation.
Think of it as a chain of command for the clock: everyone looks up to their nearest superior for the correct time, and only the one person at the top of the whole organisation is allowed to look outside it.
This is reflected directly in a registry value most administrators never touch by hand: Type, under HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters. Most domain-joined computers have this set to NT5DS, meaning “synchronize from the domain hierarchy.” A computer that isn’t domain-joined defaults to NTP, meaning “synchronize from the servers listed in NtpServer.”
| Type Value | Meaning |
|---|---|
NoSync | The time service does not synchronize with any other source. |
NTP | Synchronizes with the servers listed in the NtpServer registry entry. Default for stand-alone clients and servers. |
NT5DS | Synchronizes with the Active Directory domain hierarchy. Default for domain members. |
AllSync | Uses every available synchronization mechanism at once. |
Why Kerberos and AD Care About Time
Kerberos authentication depends on timestamps to prevent replay attacks, and it rejects requests when the clocks of the two parties involved have drifted too far apart. When that happens, it doesn’t look like a time problem from the user’s side — it looks like a failed login, a broken trust, or an application that mysteriously stopped working. There’s a dedicated troubleshooting post on karanth.ovh for exactly that symptom, Kerberos Clock Skew — KRB_AP_ERR_SKEW, which is worth reading alongside this one if you’re chasing an active authentication failure rather than trying to understand the hierarchy itself.
AD DS replication also depends on synchronized clocks to keep object metadata consistent across domain controllers, and certificate validity windows, Group Policy timestamps, and audit log correlation across a fleet of servers all quietly assume the clocks agree with each other.
Configuring the PDC Emulator (GUI and Group Policy)
Because only the forest root PDC emulator is supposed to reach outside the domain hierarchy, that’s the one machine where W32Time configuration is a deliberate, one-time decision rather than something left on the default. Windows stores this configuration as registry entries, and Group Policy is the supported way to manage it at scale rather than editing each domain controller by hand.
In the Group Policy Management Console, the relevant settings live under Computer Configuration\Administrative Templates\System\Windows Time Service. The “Time Providers” folder holds Configure Windows NTP Client (sets the peer list and sync type) and Enable Windows NTP Server (turns the computer into a source other machines can query). These policy settings write into HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient on the target computer, which takes priority over the equivalent local registry value once applied.
To push the same configuration from PowerShell — useful for scripting a new PDC emulator’s GPO rather than clicking through the console — target that same registry path with Set-GPRegistryValue:
# Point the PDC-emulator GPO's NTP client at two external time servers
$params = @{
Name = 'PDC Emulator - External Time Source'
Key = 'HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient'
ValueName = 'NtpServer', 'Type'
Value = '0.pool.ntp.org,0x8 1.pool.ntp.org,0x8', 'NTP'
Type = 'String'
}
Set-GPRegistryValue @params
NtpServer through the Configure Windows NTP Client Group Policy, W32Time ignores the plain NtpServer registry value under W32Time\Parameters entirely. Run w32tm /query /configuration on the target computer to confirm which source actually won, rather than assuming the registry value you can see locally is the one in effect.
Configuring and Verifying From the Command Line
For a one-off change, or to verify what a GPO actually applied, w32tm covers the same ground directly. This is also the tool to reach for on a domain controller during initial promotion or recovery, before Group Policy has necessarily refreshed.
# Point this computer (the forest root PDC emulator) at external NTP servers
w32tm /config /manualpeerlist:"0.pool.ntp.org 1.pool.ntp.org" /syncfromflags:manual /reliable:yes /update
# Restart the service so the new configuration takes effect
net stop w32time && net start w32time
# Return a computer to the default domain-hierarchy behaviour
w32tm /config /syncfromflags:domhier /update
# Restart the service again so the reverted configuration takes effect
net stop w32time
net start w32time
# Show the runtime configuration and where each setting came from (GPO vs local registry)
w32tm /query /configuration
# Show the current time source and synchronization status
w32tm /query /source
w32tm /query /status /verbose
# Force an immediate resync, rediscovering time sources first
w32tm /resync /rediscover
# Analyse a list of servers for reachability and offset without changing configuration
w32tm /monitor
# Confirm which NtpServer value is actually configured in the registry
reg query HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
w32tm /query /status /verbose. A healthy domain member shows a Source naming a real domain controller (or the configured external peer on the PDC emulator), a recent Last Successful Sync Time, and a small Phase Offset — well under a second.
Version and Requirement Boundaries
| Item | Detail |
|---|---|
Default Type — domain members | NT5DS — synchronize from the domain hierarchy. |
Default Type — stand-alone / workgroup | NTP — synchronize from the servers in NtpServer, which defaults to time.windows.com,0x1. |
| Poll interval bounds — domain controllers | MinPollInterval 6 (64s), MaxPollInterval 10 (1024s) — tighter than member computers, so DCs settle faster. |
| Poll interval bounds — domain members | MinPollInterval 10 (1024s), MaxPollInterval 15 (32768s). |
| 1ms accuracy | Achievable on Windows Server 2016 and later domain members under reasonable operating conditions; not a design goal of earlier versions. |
UtilizeSslTimeData (secure time seeding) | Defaults to enabled (1) on every supported version except Windows Server 2025, where the out-of-box default changed to disabled (0). |
| Required privileges | Local Administrators group to run w32tm against the local computer; Domain Admins to target a remote computer. |
Troubleshooting Cheat Sheet
| Symptom | Likely Cause | Fix |
|---|---|---|
| Event ID 24 — “No valid response has been received from domain controller … after 8 attempts” | The configured domain-hierarchy time partner is unreachable or has stopped responding. | Confirm the target DC is online and reachable, resolve any related discoverability events first, then run w32tm /resync /rediscover to force it to find a new partner. |
| Event ID 29 — “None of the sources are currently accessible … NtpClient has no source of accurate time” | All manually configured peers (typically on the PDC emulator) are unreachable — DNS failure, firewall block, or the upstream NTP source is down. | Check DNS resolution and outbound UDP 123 to each peer in /manualpeerlist, then confirm with w32tm /monitor. |
| Event ID 38 — NtpClient cannot reach or is receiving invalid time data from a source | The named time source is unreachable, or is responding with malformed or untrusted NTP data. | Verify the source is a legitimate, reachable NTP server; on a domain member confirm it hasn’t been left pointed at a stale manual peer instead of the domain hierarchy. |
w32tm /query /source on a non-PDC-emulator DC shows an external NTP name |
The DC was manually configured with /syncfromflags:manual at some point and never reverted, so it’s no longer following the domain hierarchy. |
Run w32tm /config /syncfromflags:domhier /update and restart the service so it rejoins the hierarchy. |
| PDC emulator role moves to a different DC, and time sync problems follow it | The external time source was configured on the old PDC emulator specifically, and the new one is still set to NT5DS like an ordinary DC. |
Re-run the PDC-emulator configuration (manual peer list plus /reliable:yes) on the DC that now holds the role — this configuration does not transfer automatically with the FSMO role. |
| Authentication fails intermittently, but time on both ends “looks fine” at a glance | Small but real clock skew between a client and its authenticating DC, often below what a casual look at the clock would catch. | Compare offsets precisely with w32tm /stripchart /computer:<dc> /samples:5 rather than eyeballing the system clock; see the dedicated Kerberos clock skew post for the full diagnostic path. |
Final Thoughts
W32Time is one of those services nobody thinks about until authentication starts failing for no obvious reason. The hierarchy behind it is simple once it’s laid out — clients follow their DC, DCs follow the PDC emulator, the PDC emulator follows whatever it’s been told to trust — but it’s easy to lose track of who’s supposed to be following whom, especially after a FSMO role transfer or a DC that was manually reconfigured during a one-off fix and never reverted.
Treat the domain time hierarchy as part of the identity infrastructure, not a background utility. The forest root PDC emulator is the one machine in the environment where “just point it at an NTP server” is the correct answer; everywhere else, the correct answer is to leave it on NT5DS and let the hierarchy do its job.
w32tm /query /status /verbose shows a Source that matches where the computer is supposed to sit in the hierarchy (a real DC for clients and member servers, the configured external peer for the forest root PDC emulator) and a small Phase Offset, W32Time is doing its job correctly.
Next, it’s worth covering AD Sites and Services — subnets, site links, and replication scheduling — since site topology is what determines which domain controller a client actually nominates as its time partner in a multi-site forest.