Windows API to trigger the time synchronization
There is no API exposed by the time service, but to trigger a time synchronization you can use the w32tm
command line tool.
In C/C++ you can do something like this:
include <process.h>
...
system("w32tm /resync /nowait");
Take a look at w32tm documentation for further options.
This seems to work:
using System;
using System.Runtime.InteropServices;
namespace ClockResync
{
class Program
{
[DllImport("w32time.dll")]
public static extern uint W32TimeSyncNow([MarshalAs(UnmanagedType.LPWStr)]String computername, bool wait, uint flag);
static void Main(string[] args)
{
Console.WriteLine(W32TimeSyncNow("computername", true, 8).ToString());
Console.ReadLine();
}
}
}
It's undocumented so I'm not exactly sure what the possible flags are, but 8 seems to do the job just fine - tested with my system clock. If you're running Windows 64-bit, compile for 64-bit or you'll be getting access violation exceptions.
W32TimeQueryStatus
should be able to get the last successful sync time. I'll work on that when I have more time.