Skip to content

Time Providers

A DLL the Windows Time service loads as a time provider when it starts.

Use it to find a DLL loaded into the Windows Time service at every start, beside the built-in NTP providers.

  • SYSTEM
  • Persistence

What It Is

The Windows Time service keeps the computer clock accurate, and it uses time providers to do this. An input provider gets the time from hardware or the network, and an output provider gives the time to other computers on the network. Each provider has a key under W32Time\TimeProviders in HKLM SYSTEM with DllName, Enabled and InputProvider values. The time provider manager starts each enabled provider at system startup.

What It Proves

A DllName under a TimeProviders subkey, with Enabled set to 1, is loaded by the Windows Time service, which runs under a service host. It persists across reboots in a service context.

What It Does Not Prove

NtpClient and NtpServer ship with Windows, and Hyper-V or VMware add genuine providers on virtual machines, so judge any other by its DLL. The provider loads only while the time service runs.

Where It Lives

Time Providers lives in the SYSTEM hive, which holds settings for the whole machine. Offline Hive shows the path inside the hive file, as Registry Explorer opens it, and Live System shows the same key as regedit shows it on a running machine. The line under the path is where the hive file sits on disk.

SYSTEM\ControlSet001\Services\W32Time\TimeProviders\<name>
Hive file: C:\Windows\System32\config\SYSTEM

What It Looks Like

These are three values from this key on ws-042, the fictional machine the wiki follows, decoded into plain English. Each row shows the value as Windows stores it, its name, type and data, then what it tells you.

Values in Time Providers, each with what it tells you
Registry ValueWhat It Tells You

NtpClient\DllName

REG_EXPAND_SZ%systemroot%\system32\w32time.dll

The NtpClient provider loads the genuine w32time.dll from System32, as expected. Check DllName and Enabled on any other provider against the known set.

NtpClient\Enabled

REG_DWORD0x00000001 (1)

NtpClient is enabled, so the time service loads it while it runs. Enabled with a System32 DllName is the normal state for this provider.

VMICTimeProvider\DllName

REG_EXPAND_SZ%SystemRoot%\System32\vmictimeprovider.dll

VMICTimeProvider, the Hyper-V provider Windows ships, loads a System32 DLL as expected. An unknown provider or a DLL elsewhere is the one to resolve.

How to Read It

List the subkeys under TimeProviders. NtpClient and NtpServer are standard, and VMICTimeProvider is normal under Hyper-V. Read DllName and Enabled in each. An unknown provider or a non System32 DLL is suspect. Resolve the DllName and check it against the known time components.

When Windows Writes It
When a provider is registered or enabled, usually with admin rights.
Which Windows Versions
Windows XP to 11
Tools That Parse It
Autoruns, Registry Explorer, RECmd

Hunt It

Microsoft does not say which keys Defender records, so confirm it records this one first. A hit shows a provider registered, not that the time service loaded it.

KQLDefender XDR, Advanced hunting
// A DllName registered under TimeProvidersDeviceRegistryEvents| where Timestamp > ago(30d)| where DeviceName startswith "ws-042"| where RegistryKey has "TimeProviders" and RegistryValueName =~ "DllName"| project Timestamp, ActionType, RegistryKey, RegistryValueData, InitiatingProcessCommandLine

Confirm It With

One artefact can mislead on its own. These other records show the same activity, or pin down when it happened, so use them to back up what Time Providers shows.

  • ServicesShows whether the Windows Time service is set to run, which is when the provider loads.
  • Time Service Loads a DLL, Sysmon Event 7Not in the RegistryShows the time service loading the provider DLL.

Sources