Laden...

Synchrone Zeit ohne ständige Internetverbindung sicherstellen und vor Manipulationen schützen

Erstellt von Nightmare vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.679 Views
N
Nightmare Themenstarter:in
20 Beiträge seit 2008
vor 12 Jahren
Synchrone Zeit ohne ständige Internetverbindung sicherstellen und vor Manipulationen schützen

Hallo ich habe ein Problem welches mir ein wenig Kopfzerbrechen bereitet!

Und zwar brauche ich für mein Programm eine synchrone (heißt in dem Fall gegen eine Stratum1 Ntp-Server gesyncte) Zeit.
Wäre ja alles kein Problem nur leider soll dies keine ständige Internetverbindung voraussetzen, sondern nur beim Starten des Programms. -> Ist nunmal so gegeben, also indiskutabel 😃
Das nächste Problem sind Änderungen an der Systemzeit durch den Benutzer (oder wen auch immer), die natürlich auch erfasst werden müssen!

Meine Überlegung bisher:

  • Beim Starten des Programms gegen NTP Server syncen und Drift speichern
  • Ein Thread läuft jede Minute, speichert die aktuelle Systemzeit und Startet eine Stopwatch
  • Bei einer Änderung der Systemzeit (gecatchte Windows Message) wird dieser Thread gelockt und die letzte abgefangene Systemzeit gegen die Laufzeit der Stopwatch gesynct -> Damit wären wir eigentlich wieder total synchron
  • Zum ermitteln der Zeit wird die gecatchte Systemzeit abzüglich des Drifts ausgegeben

Was ich jetzt als Problem sehe ist, wenn nach dem Abfangen der "WM_TIMECHANGE" Message der Thread nicht schnell genug blockiert wird (Und das ist meiner Meinung nach nicht genau zu bestimmen) ich in meinem Thread gegen die verstellte Zeit synce und den Unterschied der Änderung nicht berücksichtige!

Ich weiß das ich hier nur Theorien verwende aber könnt ihr mir trotzdem ein wenig auf die Sprünge helfen?

5.742 Beiträge seit 2007
vor 12 Jahren

Hallo Nightmare,

kannst du nicht einfach mit Gruppenrichtlinien jedem das Ändern der Systemzeit untersagen (außer deinem Programm und dem Admin natürlich 😉 )?

N
Nightmare Themenstarter:in
20 Beiträge seit 2008
vor 12 Jahren

Schön wärs 8)

EDIT:
Hinzuzufügen ist noch, das das Programm auf Clients verwendet wird, die uneigeschränkten Zugriff auf das System haben! Das heißt die Systemzeit kann durch den User manipuliert werden.
Mein Programm soll auch nicht die Systemzeit ändern, sondern diese nur auslesen!

G
47 Beiträge seit 2011
vor 12 Jahren

Hi Nightmare,

wär es vielleicht eine Möglichkeit, eine eigene Uhrzeitklasse zu schreiben, die bei Programmstart die NTP-Zeit bekommt und eine Stopwatch startet.

Aus der Startzeit und der Stopwatch.Elapsed errechtnet eine Funktion dann die 'richtige' Zeit ohne auf die Systemzeit angewiesen zu sein.

Gruß
Gwinn

1.820 Beiträge seit 2005
vor 12 Jahren

Nobody is perfect. I'm sad, i'm not nobody 🙁

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Nightmare,

meines Wissens ist GetTickCount nicht von der Umstellung der Sytemzeit betroffen. Wenn du die reale Zeit also einmal ermittelt hast, kannst du auf diese die Differenz vom aktuellen GetTickCount und dem GetTickCount zum Zeitpunkt der Ermittlung der realen Zeit addieren, um die tatsächliche aktuelle Zeit zu bekommen.

herbivore

N
Nightmare Themenstarter:in
20 Beiträge seit 2008
vor 12 Jahren

@herbivore

Deine Methode, bzw. deine Anregung erscheint mir als einzige Möglichkeit den Sync sauber durchzuführen!

Die Anforderungen an den Sync wurden aber mittlerweile geändert, heißt ich muss nicht mehr so extrem auf die Zeitänderungen durch den User achten!

Vielleicht setzte ich das ganze aber trotzdem mal irgendwann um und versuche einen sauberen Artikel darüber zu verfassen.

Vielen Dank für eure Hilfe und die Anregungen!
Und nochmal eine Entschuldigung für die anfängliche Verwirrung in meiner Problembeschreibung!