2017-05-29 1 views
0

J'essaie d'utiliser SetSystemTime (à partir de Kernel32.dll) ou d'utiliser TIME de cmd.exe.
les deux échouent, TIME me donne l'erreurAutorisations manquantes à utiliser SetSystemTime

Un privilège requis n'est pas tenu par le client.

Je l'ai déjà utilisé gpedit.msc pour ajouter des utilisateurs locaux/ainsi que l'utilisateur lui-même à security settings/Local Policies/Change the system time.
J'ai essayé d'activer le privilège avec AdjustTokenPrivileges(SeSystemtimePrivilege ...), mais j'ai eu une erreur GrandPrivilege failed. J'utilise Win7 x32 Professional.

C'est un utilisateur standard avec des privilèges d'administrateur, mais j'essaye de faire les changements d'heure sans "Run as Administrator", car le programme qui appelle la fonction SetSystemTime ne devrait pas être démarré avec "Run as Administrator".

Je suppose que le but de la politique Change the system time est exactement dans ce cas et il est également décrit à MSDN

Je suis à perte quoi faire.

+0

Vous devrez peut-être démarrer le cmd par "Exécuter en tant qu'administrateur", sinon il est toujours en cours d'exécution sans privilèges élevés. – kennyzx

+0

@kennyzx Merci, mais un utilisateur normal ne peut pas exécuter la commande avec "Exécuter en tant qu'administrateur" (Dans mon cas, c'est possible, comme l'utilisateur l'a). Et le programme utilisant SetSystemTime ne doit pas être démarré avec les privilèges d'administrateur – jeb

+0

Vous essayez donc d'autoriser un utilisateur standard à modifier l'heure système en modifiant les paramètres de stratégie de groupe. Par défaut, seuls les administrateurs et les SERVICES LOCAUX peuvent effectuer la modification. – kennyzx

Répondre

1

Il se avère que même si SeSystemTimePrivilege ne déclenche pas l'UAC pour un non-administrateur, il est encore retiré du jeton restreint qui est généré lorsqu'un journaux d'administrateur. Le résultat est que vous pouvez utiliser la stratégie de groupe Affectez SeSystemTimePrivilege aux utilisateurs non administratifs, mais la stratégie n'a aucun effet pour un utilisateur administratif.

S'il est acceptable que le programme exige une élévation lorsqu'il est exécuté par un utilisateur administratif, vous pouvez utiliser le paramètre de manifeste highestAvailable. De cette façon, le programme demandera seulement l'élévation si l'utilisateur est un administrateur. Alternativement, vous pouvez concevoir le programme pour demander l'élévation seulement quand il doit réellement placer l'heure.

Si une invite d'élévation n'est pas acceptable, vous devrez installer un service système pour modifier l'heure système au nom de votre application.

+0

Merci pour votre perspicacité, j'avais peur d'un tel résultat. Comme mon programme ne peut pas demander à l'utilisateur, je dois écrire un service système – jeb