At first, I have to state that I did not touch Windows 10 yet, and I did not touch a Raspberry yet. On the other hand, I have seen the following method solving all time synchronization problems with so many Windows machines of all sorts that you could give it a try.
The problems (according to my experience):
1) time.windows.com is extremely unreliable. In my setups and those of several customers, in most cases time did not synchronize reliably after an out-of-the-box installation of Windows, even if no wireless connection was involved and even if there was a reliable high data rate / low latency connection to the internet provider.
2) Windows seems to query the NTP servers in an unusual (we could also say: wrong) way. While I am not deep enough into NTP to give a detailed explanation, Windows as a client seems to send so-called "symmetric active" packets to servers instead of normal "client packets". So at first it works very unreliably with other (standard) NTP servers, too.
Possible solutions
The solution to problem 1) is obvious: Install a standard NTP server somewhere in your network. If you have a Linux box at hand, I eventually could help you configure this correctly. Then, connect your Raspberrys to this NTP server via cable and on the Raspberrys apply the solution to problem 2 (see below).
The solution to problem 2) is less obvious and involves setting an undocumented flag (at least, it is undocumented in Windows 7 Pro which I have at hands right now) for the Windows time service. You already have queried the Windows time service status, and you have shown us the output. Please note the following part from your output (e.g. for device 2):
Source: time.windows.com,0x9 Poll Interval: 15 (32768s)
The problem is the 0x9
which should be 0x8
. To change that flag, open a command line window as administrator (just belonging to the administrative group will not be enough) and execute the following command:
w32tm /config /manualpeerlist:xxx.xxx.xxx.xxx,0x8 /syncfromflags:MANUAL
Note how the correct flag 0x8
is added (of course, xxx.xxx.xxx.xxx is the IP address of your NTP server, but you could give a normal host name (e.g. ntpserver.example.org) as well). Basically, the line above tells the Windows time service which server it should synchronize to, that it should synchronize only to that server, and that it should send normal client request packets (instead of active symmetric packets) to that server.
After you have done this, you have to apply the change either by restarting the Windows time service of by updating its configuration (I prefer the first one).
If you then query the status again, there will be the following part in your output:
Source: xxx.xxx.xxx.xxx,0x8 Poll Interval: xx (xxxxxs)
Note that the flag in the output now has changed from 0x9
to 0x8
.
Two final notes
1) I am not sure if the solution to problem 2) works if you insist on synchronizing to time.windows.com. Since it is not reliable, I haven't used it for years now. Chances are that the situation even becomes worse if you change said flag from 0x9
to 0x8
, but still use time.windows.com as NTP server.
Setting up your own NTP server in your local network is a very good idea for several reasons (I won't go into detail here because it would be off-topic). If you can't or don't want to do this, I recommend using other public time servers (start your search by visiting http://www.ntp.pool.org) instead of time.windows.com. They will definitely work with the solution to problem 2).
2) As a last resort, you could try to install another time service into Windows. For example, there is a full-blown port of the NTP software for Windows, but AFAIK, only for the Intel platform. Since I don't know anything about the Raspberry (ARM) platform, I don't know if there is another time service software at all, so this is just an idea in case every other method fails.