“The computer did not resync because no time data was available” Fixing AD Time Sync

Sometimes, a routine helpdesk ticket turns into a full-scale infrastructure investigation. It started with a standard user complaint: the clock on their Windows workstation was drifting, being almost a full day behind.

Usually, in situations like this, I rely on my standard routine to reset the Windows Time Service (0x80070426). I connected to the problematic PC, unregistered and registered the w32time service, started it, and ran the final command:

C:\Windows\system32>w32tm /resync /rediscover
Sending resync command to local computer
The computer did not resync because no time data was available.

(Restarting the service didn’t help. The PC was essentially saying it had no one in the network to ask for the correct time.)

Diagnosing the Client

To understand why the client went blind to the network time, I checked the current status:

C:\Windows\system32>w32tm /query /status
Leap Indicator: 3 (not synchronized)
Stratum: 0 (unspecified)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0000000s
Root Dispersion: 0.0000000s
ReferenceId: 0x00000000 (unspecified)
Last Successful Sync Time: unspecified
Source: Local CMOS Clock
Poll Interval: 10 (1024s)

The machine had given up on finding a network source and reverted to its internal motherboard battery clock. But why? I checked the registry to ensure it was configured to look for a Domain Controller:

C:\Windows\system32>reg query HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters /v Type
Type    REG_SZ    NT5DS

The registry was perfectly fine (NT5DS means it follows the domain hierarchy). This meant the problem wasn’t on the workstation, it was on our servers.

Investigating the Domain Controllers

I needed to check the health of the time hierarchy across the domain. Running the monitor command gave me the full, alarming picture:

PS C:\Users\admin> w32tm /monitor
DC-01.domain.local[10.0.0.11:123]:
    ICMP: 2ms delay
    NTP: +192.7385688s offset from DC-PDC.domain.local
        RefID: (unspecified / unsynchronized) [0x00000000]
        Stratum: 0
DC-02.domain.local[10.0.0.12:123]:
    ICMP: 1ms delay
    NTP: -234.0943929s offset from DC-PDC.domain.local
        RefID: (unspecified / unsynchronized) [0x00000000]
        Stratum: 0
DC-PDC.domain.local *** PDC *** [10.0.0.10:123]:
    ICMP: 4ms delay
    NTP: +0.0000000s offset from ntp.domain.server
        RefID: 'NTP' [0x50544E]
        Stratum: 3

Warning:
Reverse name resolution is best effort. It may not be
correct since RefID field in time packets differs across
NTP implementations and may not be using IP addresses.

Analyzing the breakdown:

  • DC-01 and DC-02: Both show Stratum: 0. In the NTP world, Stratum 0 means the server is unsynchronized and is not a valid time source. Clients will ignore these servers entirely.
  • The PDC Emulator: While it shows Stratum 3, the secondary DCs (DC-01/02) have such a massive offset (+192s and -234s) that they’ve stopped trusting it.
  • The Cascade Failure: Because the DCs returned errors or Stratum 0, the workstation we started with had no choice but to revert to its Local CMOS Clock.

To see how bad the drift was, I ran a stripchart against our internal NTP server from the different DCs. The environment was completely chaotic:

On the first Domain Controller (DC-01):
C:\Windows\system32>w32tm /stripchart /computer:ntp.domain.com /dataonly /samples:5
Tracking ntp.domain.com.
Collecting 5 samples.
The current time is 19.03.2026 14:26:03.
14:26:03, -93.7916077s
14:26:05, -93.7916630s
14:26:07, -93.7907250s
14:26:09, -93.7917642s
14:26:11, -93.7916249s

On the second Domain Controller (DC-02):
C:\Windows\system32>w32tm /stripchart /computer:ntp.domain.com /dataonly /samples:5
Tracking ntp.domain.com.
Collecting 5 samples.
The current time is 19.03.2026 14:21:15.
14:21:15, +98.9773148s
14:21:17, +98.9772527s
14:21:19, +98.9772680s
14:21:21, +98.9774052s
14:21:23, +98.9773600s

At this point, the diagnosis was complete. The domain hierarchy had completely collapsed. The PDC Emulator was isolated, and the secondary DCs had “detached” themselves, leaving all workstations (including the one that started this ticket) stuck on their own Local CMOS Clocks.

Fixing the PDC Emulator

In an Active Directory environment, the PDC Emulator is the “Source of Truth.” I configured the PDC to strictly use our internal NTP server and declare itself as a reliable source:

C:\Windows\system32>w32tm /config /manualpeerlist:"ntp.domain.com,0x8" /syncfromflags:manual /reliable:YES /update
The command completed successfully.

Even though the command was successful, the PDC refused to sync. The time was still lagging by nearly 100 seconds. Why? Because by default, if the time drift is too large, the Windows Time service ignores the external source to prevent system instability.

To break this deadlock, I had to manually set the system time on the PDC to within a few seconds of the actual time. Once the offset was “reasonable,” I ran the resync command again:

C:\Windows\system32>w32tm /resync /rediscover
Sending resync command to local computer
The command completed successfully.

Even after the successful resync, the time didn’t become perfect instantly. I ran a continuous stripchart and watched the PDC slowly “catch up” with the NTP server, closing the gap by about 1-2 seconds per sample:

C:\Windows\system32>w32tm /stripchart /computer:ntp.domain.com /dataonly /samples:999
14:37:26, +38.4877643s
14:37:28, +36.4536812s
14:37:31, +34.4201367s
... [5-10 minutes later] ...
14:45:12, +00.0014251s

Restoring the Secondary DCs

With the PDC finally on the move, I headed to the other Domain Controllers. I didn’t want to wait for them to figure it out on their own, so I forced a resync on each one:

C:\Windows\system32>w32tm /resync /rediscover

The secondary DCs followed the same “slewing” behavior. They recognized the PDC as a reliable source but adjusted their clocks gradually. It took about 10 minutes for the entire environment to stabilize.

I monitored the progress with w32tm /monitor until all offsets were back to near-zero:

PS C:\Users\admin> w32tm /monitor
DC-01.domain.local: NTP: +0.0012451s offset from DC-PDC.domain.local
DC-02.domain.local: NTP: -0.0021458s offset from DC-PDC.domain.local
DC-PDC.domain.local *** PDC ***: NTP: +0.0004512s offset from ntp.domain.com

Once the DCs were healthy, I went back to the original workstation. A simple w32tm /resync there worked instantly.

The Virtualization Trap

If your Domain Controllers are running as Virtual Machines, there is a silent killer of NTP synchronization: Host Time Integration.

By default, both VMware and Hyper-V have features designed to synchronize the Guest OS clock with the Physical Host clock. In a standard environment, this is helpful. In an Active Directory environment, it is a disaster.

Windows Time Service (w32time) expects to have one “Source of Truth” (the NTP hierarchy). When the hypervisor suddenly “injects” its own hardware clock time into the VM during runtime, it creates a conflict. The DC sees a sudden jump, compares it with the PDC, gets confused, loses trust, and drops to Stratum 0.

To prevent this from happening, you must stop the hypervisor from interfering with the runtime clock. However, the method depends entirely on your hypervisor.

For VMware:

The standard approach is to disable the sync via the GUI:

  1. Right-click the DC VM -> Edit Settings.
  2. Go to VM Options tab -> VMware Tools.
  3. Uncheck “Synchronize guest time with host”.

For Hyper-V:

(Update: A big thank you to System Administrator BlackV from the r/SysAdminBlogs community for highlighting a critical engineering detail regarding Hyper-V time sync mechanics, referencing this classic Microsoft engineering post).

If you simply uncheck “Time synchronization” in the Hyper-V Integration Services GUI, you create a new trap. If the DC reboots or resumes from a saved state after a long downtime, it will wake up with its outdated “virtual BIOS” time. This massive time gap will immediately break Kerberos authentication before w32time even gets a chance to reach the PDC and correct it.

The recommended approach is to leave the GUI setting ON so the VM gets the absolutely correct time at boot, but disable the integration provider inside the guest OS registry so it stops interfering during runtime.

Step 1: Ensure “Time synchronization” is checked in the Hyper-V VM Settings (Integration Services).

Step 2: Run the following sequence in an elevated command prompt on the virtual DC:

PowerShell

# 1. Disable the Hyper-V time provider in the registry
reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\VMICTimeProvider /v Enabled /t REG_DWORD /d 0 /f

# 2. Force the DC to look for the domain hierarchy (PDC)
w32tm /config /syncfromflags:DOMHIER /update

# 3. Restart the Time Service
net stop w32time && net start w32time

# 4. Force an immediate resync
w32tm /resync /force

What this does:

  1. Registry Edit: Stops the VM from listening to the host clock while the OS is running.
  2. DOMHIER: Explicitly tells this DC to trust the Active Directory hierarchy (the PDC) as its primary source.
  3. Resync /force: Tells the system to stop “slewing” and immediately align its clock with the correct time.

Leave a Comment