Windows · Time Sync

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.

Quick idea: W32Time keeps every domain-joined computer’s clock aligned by following a strict hierarchy — clients and member servers sync from their authenticating domain controller, domain controllers sync from the PDC emulator, and only the forest root PDC emulator is meant to reach outside the organisation for time.
W32Time

The Windows service that synchronizes the system clock using NTP, installed by default on every Windows computer.

w32tm

The command-line tool used to configure, query, and troubleshoot the Windows Time service.

PDC Emulator

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.

Important: W32Time was not originally designed as a high-accuracy time source. Starting with Windows Server 2016, improvements to the synchronization algorithm allow domain members to maintain roughly 1-millisecond accuracy under reasonable conditions, but earlier versions should not be relied on for time-sensitive applications without extra configuration.

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
NoSyncThe time service does not synchronize with any other source.
NTPSynchronizes with the servers listed in the NtpServer registry entry. Default for stand-alone clients and servers.
NT5DSSynchronizes with the Active Directory domain hierarchy. Default for domain members.
AllSyncUses every available synchronization mechanism at once.
In Active Directory: Every domain member in the forest should end up tracing its time, directly or indirectly, back to a single forest root PDC emulator. If two computers in the same forest are ultimately anchored to two different external sources, they can drift apart from each other even while each one looks individually healthy.

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
Practical note: If you set 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
Healthy output: Run 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 membersNT5DS — synchronize from the domain hierarchy.
Default Type — stand-alone / workgroupNTP — synchronize from the servers in NtpServer, which defaults to time.windows.com,0x1.
Poll interval bounds — domain controllersMinPollInterval 6 (64s), MaxPollInterval 10 (1024s) — tighter than member computers, so DCs settle faster.
Poll interval bounds — domain membersMinPollInterval 10 (1024s), MaxPollInterval 15 (32768s).
1ms accuracyAchievable 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 privilegesLocal 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.

Key takeaway: If 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 in this series

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.