Tak. Możesz przeczytać Windows Event Logs i poszukać zmian w czasie systemowym. (Zmiany czasu systemowego są jednym ze zdarzeń systemowych, które są automatycznie rejestrowane.) Na przykład, po prostu poprawiłem czas systemowy o kilka sekund, a w dzienniku zdarzeń systemowych pojawiło się następujące:
Informacje 10/21/2011 11:16:26 Kernel-General 1 Brak
Czas systemowy zmieniono na 2011 - 10 - 21T16: 16: 26.000000000Z od 2011 - 10 - 21T16: 16: 26000000000Z.
Możesz następnie zapytać o te zdarzenia, aby ustalić, czy rzeczywiście został zmieniony czas. W tym rozwiązaniu najlepsze jest to, że jest wbudowany i zawsze działa. Nie musisz monitorować zdarzeń za pomocą niestandardowej usługi itp. Po prostu zapytujesz dane systemu operacyjnego.
To nadal nie jest rozwiązanie zabezpieczone przed kulami. ponieważ osoby z prawami administratora mogą konfigurować przypadki, czyścić logi itp. Ale na pewno zainstalowałbyś dla swojej aplikacji ochronę. Dzienniki zdarzeń systemowych nie są czymś, o czym zwykli użytkownicy systemu Windows myślą.
XML dla tego konkretnego przypadku: (de-zidentyfikowany dla prywatności & bezpieczeństwa)
<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>
możliwy duplikat [Czy istnieje zdarzenie API dla osoby zmieniającej zegar w systemie Windows?] (Http://stackoverflow.com/questions/756506/is-there-an-api-event-for-when-person- zmienia zegar na oknach) –
Byłbym bardzo, bardzo zaskoczony, gdyby był sposób na zrobienie tego. Nie jest to również duplikat (pytanie wyraźnie stwierdza "bez' WM_TIMECHANGE "). – Jon
Nie sądzę, że jest to duplikat, ponieważ szukam sposobu, aby wykryć zmianę po fakcie. Pozostałe pytania dotyczą wykrycia zmiany, kiedy to się stanie. –