AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetSystemTime unter Windows VISTA?
Thema durchsuchen
Ansicht
Themen-Optionen

SetSystemTime unter Windows VISTA?

Ein Thema von Schucki · begonnen am 9. Dez 2008 · letzter Beitrag vom 20. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#1

SetSystemTime unter Windows VISTA?

  Alt 9. Dez 2008, 22:30
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
Frank
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#2

Re: SetSystemTime unter Windows VISTA?

  Alt 9. Dez 2008, 23:40
In der MSDN steht folgendes:
Zitat:
The SetSystemTime function enables the SE_SYSTEMTIME_NAME privilege before changing the system time. This privilege is disabled by default. For more information, see Running with Special Privileges.
Jan
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#3

Re: SetSystemTime unter Windows VISTA?

  Alt 10. Dez 2008, 00:27
Vielen Dank!

Das habe ich noch nie gemacht, wie arbeitet man den mit "Special Privileges".
Kennt jemand ein Beispiel?

Gruß Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#4

Re: SetSystemTime unter Windows VISTA?

  Alt 10. Dez 2008, 01:02
Hier gibt es ein Beispiel für ExitWindows. Das musst du nur auf SeSystemtimePrivilege umstellen...
Jan
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#5

Re: SetSystemTime unter Windows VISTA?

  Alt 10. Dez 2008, 02:17
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
Frank
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

Re: SetSystemTime unter Windows VISTA?

  Alt 20. Jan 2010, 09:39
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 ( ) und gefunden:

Delphi-Quellcode:
   
  // 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;
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).

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
Uwe
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: SetSystemTime unter Windows VISTA?

  Alt 20. Jan 2010, 09:58
Hallo,

1

Dort steht bei Return Values

Zitat:
If the function succeeds, the return value is nonzero.
To determine whether the function adjusted all of the specified privileges, call GetLastError, which returns one of the following values when the function succeeds
Ich würde also danach mit GetLastError prüfen.


Und ausserdem

Zitat:
The AdjustTokenPrivileges function cannot add new privileges to the access token. It can only enable or disable the token's existing privileges.
d.h. du musst das Recht zur System-Zeit schon vorher haben (z.B. als Admin).

Du hast nicht geschrieben, ob du das Programm als Admin gestartet hast.


Heiko
Heiko
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

Re: SetSystemTime unter Windows VISTA?

  Alt 20. Jan 2010, 10:18
Hallo Heiko,

danke für die schnelle Antwort.

Der Rückgabewert ist ungleich 0.

Zitat:
showmessage('Priv geändert: ' + BoolToStr(tpResult)); wird bei allen Betriebssystemen erreicht.
GetLastError wird also "Alles Roger" zurückgeben.


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?

----------------------------

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
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: SetSystemTime unter Windows VISTA?

  Alt 20. Jan 2010, 10:26
Zitat von Schorschi5566:
Der Witz ist doch, dass es jeder User können soll oder habe ich da was falsch verstanden?
Nein der Witz ist der, dass nicht jeder Benutzer an der Systezeit rumspielen kann, wie es ihm lustig ist. Das Recht, die Systemzeit zu ändern, hat nun mal standardmäßig nur der Administrator. Du kannst natürlich dieses Recht bzw. Privileg auch anderen Benutzergruppen geben, nur ob dein Programm dann noch von anderen eingesetzt wird weiß ich nicht. Ich würde es nicht auf einem Rechner installieren, an dem mehrere Leute arbeiten oder in einer Firma.

Aber warum soll ein normaler Benutzer die Systemzeit ändern können? Ich sehe keinen Grund dafür.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

Re: SetSystemTime unter Windows VISTA?

  Alt 20. Jan 2010, 10:51
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".

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
Uwe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz