Fix it now
Microsoft publishes 0xC004F06C as the KMS host determining that the request timestamp is invalid, and names three conditions behind it: the Windows Time service is not working, the NtpClient time provider is not enabled, or a domain-joined computer is not syncing time with Active Directory. The tolerance is four hours, compared in UTC.
w32tm /query /status /verbose
w32tm /query /source
w32tm /resync
w32tm /stripchart /computer:kms.contoso.local
- The first command is the one on Microsoft’s page for this code. Read the last successful sync and the offset before changing anything.
/resynctakes only /computer:, /nowait, /rediscover and /soft. There is no /force parameter, and adding one makes w32tm print usage instead of resynchronising.- The stripchart measures the offset against the KMS host directly, which beats comparing two clocks by eye.
- Retry activation from the Office folder:
cscript ospp.vbs /act.
Setting the time zone will never fix this. The comparison is made in Coordinated Universal Time, so two correct clocks in different time zones agree perfectly.
If activation completes you are done. If the clock drifts again within a day, the fault is upstream and the next section finds it.
Why it happens
The KMS exchange is time-bound. The client builds a request carrying a timestamp, the host compares it with its own clock, and if the gap is too large the request is discarded rather than answered. Microsoft states the figure on its page for the neighbouring code 0xC004F074: a difference of more than four hours between the client’s system time and the host’s produces this failure, and time is coordinated between the two in Coordinated Universal Time.
That UTC detail is where most of the wasted effort goes. A client in Prague and a host in London can show clocks an hour apart on screen and agree perfectly, because both store the same underlying time. Changing a time zone to compensate for drift fixes nothing and breaks everything that depends on local time.
Microsoft’s dedicated page for 0xC004F06C names three conditions rather than describing drift in the abstract, and they are worth checking in order because each has a different fix: the Windows Time service is not working, the NtpClient time provider is not enabled, or domain-joined computers are not synchronising with Active Directory Domain Services. All three produce the same symptom of a clock nobody is correcting.
Four hours is a wide tolerance by design, so when it is exceeded something has usually gone properly wrong rather than slightly wrong: a dead firmware battery, a virtual machine whose clock is overwritten by its host, a machine that has never reached a time source since deployment, or a domain hierarchy whose authoritative server is itself adrift.
The Windows Time service is not running
You have this one if Microsoft’s first documented check. The service is stopped, and nothing is correcting the clock.
- Open services.msc, find Windows Time, and confirm it is running.
- Read the state properly:
w32tm /query /status /verbose. - Start the service, then
w32tm /resync. - Set the service to start automatically if it is not, because on some standalone builds it does not.
The NtpClient provider is disabled on a machine that is not domain-joined
You have this one if A standalone or workgroup machine whose clock drifts unchecked until it crosses the tolerance.
- Set
Enabledto 1 underHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient, which is Microsoft’s documented step for this code on non-domain-joined computers. - Configure a source:
w32tm /config /manualpeerlist:"time.windows.com" /syncfromflags:manual /update. - Restart the service and resync:
net stop w32time,net start w32time,w32tm /resync. - Confirm UDP 123 outbound is permitted, since a blocked NTP port produces this with no visible error.
A domain member is not taking time from the domain
You have this one if A domain-joined machine whose w32tm /query /source names a local clock rather than a domain controller.
- Confirm the
Typevalue isNT5DSunderHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\Parameters, which is Microsoft’s documented step for domain-joined computers. - Point it back at the hierarchy:
w32tm /config /syncfromflags:domhier /update. - Restart the service and resync.
- Confirm with
w32tm /query /sourcethat it now names a server.
A hypervisor is overwriting the guest clock
You have this one if Only virtual machines fail, and their clocks snap back to a wrong value shortly after every successful resync.
- For a domain-joined guest, disable time synchronisation in the virtualisation integration components so the guest follows the domain hierarchy instead.
- Correct the host’s own clock, because a guest that follows a wrong host keeps failing whichever method you pick.
- Resync inside the guest and re-test activation.
Leaving host synchronisation enabled on a domain-joined guest gives it two authorities that disagree. Pick one.
The hardware clock cannot hold time through a power cycle
You have this one if The machine is correct while running and wrong every morning, and the firmware clock has reverted.
- Check the date in firmware setup after a full power-off. A reset date confirms the battery.
- Replace it, set the clock correctly in firmware, boot and run
w32tm /resync. - Retry activation.
Full reference
The w32tm commands, as documented
| Command | What Microsoft says it does |
|---|---|
w32tm /query /status /verbose |
Displays the Windows Time status. This exact form is on Microsoft’s page for this code |
w32tm /query /source |
Displays the time source the machine is using |
w32tm /query /configuration |
Displays the runtime configuration and where each setting came from |
w32tm /resync |
Resynchronises the clock as soon as possible. Accepts /computer:, /nowait, /rediscover and /soft |
w32tm /config /syncfromflags:domhier /update |
Synchronises from a domain controller in the domain hierarchy |
w32tm /config /manualpeerlist:"<peers>" /syncfromflags:manual /update |
Sets a manual peer list. Multiple peers must be in quotation marks |
w32tm /monitor |
Compares the clocks of domain controllers from a member machine |
w32tm /stripchart /computer:<target> |
Displays a strip chart of the offset between this computer and another |
w32tm /resync /force appears in a great deal of published guidance and does not work. /force is not a documented parameter, and given an unrecognised switch w32tm reports the argument as unexpected, prints its usage block and exits without resynchronising. Anyone who ran it and saw the clock change had something else correct it.
Reading the symptom before you change anything
| What you see | Most likely source |
|---|---|
| One physical machine drifts and resets after every shutdown | A failing firmware battery |
| Only virtual machines are affected | The hypervisor is overwriting the guest clock |
| Every domain member is out by the same amount | The authoritative clock at the top of the hierarchy |
| A newly imaged machine fails immediately | It has never reached a time source since deployment |
| A machine on a guest network fails | Outbound time traffic blocked at that network’s edge |
When the whole site fails overnight
Hundreds of machines do not drift together. When a whole site crosses the line on the same night, the authoritative clock changed, not the clients. Identify the domain controller holding the primary domain controller emulator role, point it at a reliable external source rather than its own hardware clock, and use w32tm /monitor from a member machine to see how the rest of the domain compares once the top of the hierarchy is correct.
How accurate the clock actually needs to be
Four hours is the activation tolerance, and it is generous. In practice you want the clock within seconds, because Kerberos authentication is far stricter than KMS and will fail long before activation does. If activation is the first thing to break, the clock has been wrong for a while and something else has been masking it.
The four companion codes
| Code | What can honestly be said |
|---|---|
0xC004F01E |
No published description |
0xC004F01F |
No published description |
0xC004D102 |
No published description. The 0xC004D prefix belongs to a different part of the platform from the 0xC004F codes |
0xC004D30B |
No published description. Same prefix |
Read the machine’s own text with cscript ospp.vbs /ddescr: on an Office client or slui.exe 0x2a on Windows. If one of them turns up on its own, without 0xC004F06C, this is probably the wrong article, because nothing published connects them to clock skew.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
0xC004F06C |
The computer could not be activated because the KMS host determined the request timestamp is invalid. Microsoft names the Windows Time service, the NtpClient provider and domain time sync as the conditions behind it | Microsoft Learn |
0xC004F01E |
Seen in the same exchange. No published description | not published by the vendor |
0xC004F01F |
Seen in the same exchange. No published description | not published by the vendor |
0xC004D102 |
Carries the 0xC004D prefix used by a different part of the platform. No published description | not published by the vendor |
0xC004D30B |
Same prefix, no published description | not published by the vendor |
Confirm the fix worked
w32tm /query /status /verboseshows a recent successful sync and a small offset.w32tm /query /sourcenames the source you intended, not a local clock.w32tm /stripchart /computer:<KMS host>shows an offset measured in seconds rather than hours.cscript ospp.vbs /actcompletes without an error.- Reboot, wait for the machine to settle, and confirm the clock is still correct and Office still licensed.
Questions people ask about this
Does w32tm /resync /force do anything?
No. /force is not a documented parameter of /resync. Given an unrecognised switch, w32tm reports the argument as unexpected, prints its usage block and exits without resynchronising. Use w32tm /resync on its own.
Will changing the time zone fix this?
No, and it will cause other problems. The comparison is made in Coordinated Universal Time, so two machines in different time zones with correct clocks agree perfectly. Set the time zone correctly for the location and fix the underlying clock.
How far apart can the clocks be?
Microsoft states that a difference of more than four hours between the client’s system time and the KMS host’s produces this failure. That figure is published on the page for 0xC004F074, which lists clock skew among its causes.
Does this cost anything to fix?
Nothing at all. There is no licensing component to this error. Your key, your entitlement and your KMS host are all fine, and time synchronisation is free.
Why did this appear overnight across the whole site?
Almost always because the authoritative clock changed, not because hundreds of machines drifted at once. Check the top of the domain time hierarchy first, then the firewall rules on the port your time source uses.
