Да. Вы можете прочитать Журналы событий Windows и посмотреть изменения системного времени. (Изменения системного времени являются одним из системных событий, которые автоматически регистрируются.) Например, я просто подстроил системное время на несколько секунд, и в журнале системных событий появилось следующее:
Информация 21.10.2011 11:16:26 Генерал ядра 1 Нет
Системное время изменилось на 2011 - 10 - 21T16: 16: 26.000000000Z
с 2011 года - 10 - 21T16: 16: 26.000000000Z.
Вы можете использовать Win32 API, чтобы получить доступ к журналам событий , а затем запросить эти события, чтобы определить, действительно ли время было изменено. Что хорошо в этом решении, так это то, что оно встроено и всегда работает. Нет необходимости отслеживать события через пользовательский сервис и т. Д. Вы просто запрашиваете данные ОС.
Это по-прежнему не является пуленепробиваемым решением , поскольку люди с правами администратора могут изменять настройки, очищать журналы и т. Д. Но вы определенно хотите защитить свое приложение от непрофессионала. Системные журналы событий - это не то, о чем думают обычные пользователи Windows.
XML для этого конкретного события: (не идентифицирован для обеспечения конфиденциальности и безопасности)
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Kernel-General"
Guid="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" />
<EventID>1</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000010</Keywords>
<TimeCreated SystemTime="2011-10-21T16:16:26.001000000Z" />
<EventRecordID>138478</EventRecordID>
<Correlation />
<Execution ProcessID="40044" ThreadID="50016" />
<Channel>System</Channel>
<Computer>xxxxx.xxxxxxxxx.org</Computer>
<Security UserID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
</System>
<EventData>
<Data Name="NewTime">2011-10-21T16:16:26.000000000Z</Data>
<Data Name="OldTime">2011-10-21T16:16:26.000000000Z</Data>
</EventData>
</Event>