2017-05-29 2 views
0

Ich versuche SetSystemTime zu verwenden (von Kernel32.dll) oder alternativ TIME von cmd.exe zu verwenden.
Beide scheitern, TIME gibt mir den FehlerBerechtigungen fehlt SetSystemTime verwenden

ein erforderliches Recht nicht vom Kunden gehalten wird.

Ich habe bereits verwendet gpedit.msc local/Benutzer hinzufügen und auch der Anwender selbst zu security settings/Local Policies/Change the system time.
Ich habe versucht, das Privileg mit AdjustTokenPrivileges(SeSystemtimePrivilege ...) zu aktivieren, aber ich habe einen GrandPrivilege failed Fehler.

Ich benutze Win7 x32 Professional.

Es ist ein Standard-Benutzer mit Administratorrechten, aber ich versuche, die Zeit ändert, ohne "Run as Administrator", wie das Programm zu machen, die die SetSystemTime Funktion aufruft, sollte nicht mit "Run as Administrator" gestartet werden.

sollte ich, dass der Zweck der Change the system time Politik ist genau für diesen Fall und es ist auch bei MSDN beschrieben

ich ratlos bin, was zu tun ist.

+0

Möglicherweise müssen Sie das Cmd starten, indem Sie "Als Administrator ausführen" ausführen, andernfalls wird es weiterhin ohne erhöhte Berechtigungen ausgeführt. – kennyzx

+0

@kennyzx Danke, aber ein normaler Benutzer kann den Befehl nicht mit "Als Administrator ausführen" ausführen (in meinem Fall ist es möglich, wie der Benutzer es hat). Und das Programm, das 'SetSystemTime' verwendet, darf nicht mit Administratorrechten gestartet werden. – jeb

+0

Sie versuchen also, einen Standardbenutzer zu aktivieren, um die Systemzeit zu ändern, indem Sie Gruppenrichtlinieneinstellungen bearbeiten. Standardmäßig können nur Administratoren und LOCAL SERVICES die Änderung vornehmen. – kennyzx

Antwort

1

Es stellt sich heraus, dass, obwohl SeSystemTimePrivilege nicht UAC Auslöser für einen Nicht-Administrator, es ist noch von den eingeschränkten Token entfernt, die erzeugt wird, wenn sich ein Administrator anmeldet. Das Ergebnis ist, dass Sie Gruppenrichtlinien verwenden können Weisen Sie SeSystemTimePrivilege nicht administrativen Benutzern zu, aber die Richtlinie hat keine Auswirkungen auf einen Benutzer mit Verwaltungsaufgaben.

Wenn es akzeptabel ist, dass das Programm eine Erhöhung erfordert, wenn es von einem Benutzer mit Verwaltungsaufgaben ausgeführt wird, können Sie die Manifesteinstellung highestAvailable verwenden. Auf diese Weise fragt das Programm nur nach einer Erhöhung, wenn der Benutzer ein Administrator ist. Alternativ können Sie das Programm so gestalten, dass nur nach Elevation gefragt wird, wenn tatsächlich die Uhrzeit eingestellt werden muss.

Wenn eine Anhebungsaufforderung nicht akzeptabel ist, werden Sie einen Systemdienst installiert werden müssen, um die Systemzeit zu ändern, im Namen Ihrer Anwendung.

+0

Danke für Ihre Einsicht, ich hatte Angst vor solchen Ergebnissen. Da mein Programm den Benutzer nicht fragen kann, muss ich einen Systemdienst schreiben – jeb

Verwandte Themen