![]() |
SetSystemTime unter Windows VISTA?
Hallo,
ich setze in meinem Programm die Systemzeit. Das klappt unter Windows XP wie es sein soll. Unter Windows VISTA geht der gleiche Aufruf in die Hose, obwohl ich dort auch Admin Rechte habe. Wie kann man unter Windoes VISTA die Systemzeit ändern? Gibt es da einen anderen Weg als SetSystemTime? Gruß und Danke! Frank |
Re: SetSystemTime unter Windows VISTA?
In der
![]() Zitat:
|
Re: SetSystemTime unter Windows VISTA?
Vielen Dank!
Das habe ich noch nie gemacht, wie arbeitet man den mit "Special Privileges". :gruebel: Kennt jemand ein Beispiel? Gruß Frank |
Re: SetSystemTime unter Windows VISTA?
![]() |
Re: SetSystemTime unter Windows VISTA?
Super, es funktioniert!
Das es schon 2002 bekannt war ist mir neu. Ich dachte es sein ein spezieller VISTA Weg. Nunja, auch das geschafft, Danke für die Hilfe!! Gruß Frank |
Re: SetSystemTime unter Windows VISTA?
Hallo DP-Gemeinde,
ich habe das gleiche Problem und bei mir funktioniert die Lösung leider nicht unter Vista. Folgenden Code habe ich hier gesucht ( :wink: ) und gefunden:
Delphi-Quellcode:
Danach ändere ich mit SetSystemTime die Zeit. Das Ganze funktioniert auf Win2k und XP ohne Probleme (klar, da braucht man das entsprechende Privileg ja nicht extra zu setzen).// Special-Privilege für Setzen der Systemzeit holen... if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, 'SeSystemtimePrivilege', TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then begin tpResult := Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg,cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); CloseHandle(TTokenHd); showmessage('Priv geändert: ' + BoolToStr(tpResult)); end; end; showmessage('Priv geändert: ' + BoolToStr(tpResult)); wird bei allen Betriebssystemen erreicht. Trotzdem keine Änderung der Systemzeit bei Vista. Hat jemand einen Tipp, was ich falsch mache? Viele Grüße, Uwe |
Re: SetSystemTime unter Windows VISTA?
Hallo,
![]() Dort steht bei Return Values Zitat:
Und ausserdem Zitat:
Du hast nicht geschrieben, ob du das Programm als Admin gestartet hast. Heiko |
Re: SetSystemTime unter Windows VISTA?
Hallo Heiko,
danke für die schnelle Antwort. Der Rückgabewert ist ungleich 0. Zitat:
Wenn ich das Programm mit "Als Administrator ausführen..." starte, funktioniert es ja (sogar unter Vista). Allerdings dann auch ohne den entsprechenden Codeblock. Der Witz ist doch, dass es jeder User können soll oder habe ich da was falsch verstanden? :wink: ---------------------------- Nur noch zum Verständnis: Wenn ich also das Recht "Systemzeit setzen" für alle betroffenen Benutzer einrichte, sollte es dann doch auch ohne den oben gezeigten Code funktionieren, da SetSystemTime ja das Privileg automatisch "enabled", oder? Viele Grüße, Uwe |
Re: SetSystemTime unter Windows VISTA?
Zitat:
Aber warum soll ein normaler Benutzer die Systemzeit ändern können? Ich sehe keinen Grund dafür. |
Re: SetSystemTime unter Windows VISTA?
Hi Luckie,
sorry, da habe ich mich wohl falsch ausgedrückt. Natürlich soll das nicht jeder User können. Aber mein Progi soll es eben dürfen. Ist mir schon bewußt, was passiert, wenn die User in einer AD-Domäne an der Uhrzeit "rumspielen". 8-) Aber wenn man das Privileg hinterher wieder disabled, sollte doch alles "in Butter" sein, oder? Danke soweit erstmal. Hat mir schon weiter geholfen... Viele Grüße, Uwe |
Re: SetSystemTime unter Windows VISTA?
Hallo,
Zitat:
darf es nur das, was der darf. Und nein, du musst mit GetLastError prüfen, Zitat:
es kann aber sein, dass das Ergebnis der Funktion (Privilege enablen) nicht geklappt hat. False wäre z.B. dann, wenn der User das Privilege nicht hat. Ab Vista gibt es ja 2 Tokens, auch für den Admin. Gestartet wird mit dem einfachen mit wenig Rechten. Das Starten als schaltet zum Admin-Token um, dort ist das Privileg schon enabled (im Unterscheid zu XP/w2k). Deshalb braucht man den Privileg-Code eigentlich nicht, schadet aber auch nicht ;) Sollte den Programm die Zeit setzen können, auch wenn ein User mit dem Zeit-Setzen-Recht es startet, musst du einen Dienst schreiben, von dem dein Programm dann das Zeit-Setzen einfordert. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz