Impossible de définir l’horloge à l’aide de SetSystemTime sous Windows 8

Mon application utilise SetSystemTime() pour régler l’horloge du PC à partir d’une source GPS. Cela fonctionne correctement dans Windows 7 avec le contrôle de compte d’utilisateur désactivé, mais dans Windows 8, même avec le contrôle de compte d’utilisateur désactivé, cela échoue. L’erreur que je reçois est ERROR_PRIVILEGE_NOT_HELD . L’utilisateur connecté à la machine appartient au groupe Administrateurs. Je ne peux le faire fonctionner que si j’exécute l’application en tant que “Exécuter en tant qu’administrateur” à partir du menu contextuel du fichier dans l’Explorateur – mais que l’utilisateur connecté est un administrateur.

Alors … que dois-je faire différemment sur Windows 8 pour que SetSysytemTime() fonctionne? Ai-je besoin de privilèges encore plus élevés que les droits d’administrateur des utilisateurs actuels? Si oui, quels sont les privilèges plus élevés que l’administrateur? Ou dois-je configurer le compte d’utilisateur différemment pour permettre à ce type d’appels de fonctionner sur Windows 8?

EDIT: Comme indiqué dans les commentaires, la tentative d’activation SE_SYSTEMTIME_NAME privilège SE_SYSTEMTIME_NAME ne fonctionne pas. LsaAddAccountRights pas non plus d’append le privilège à l’aide de la méthode MSDN suggérée de LsaAddAccountRights .

Je pense que cela pourrait être lié au fait que, avec le contrôle de compte d’utilisateur désactivé sur Windows 8, les processus (par défaut) s’exécutent à une intégrité moyenne, et non à une intégrité élevée (voir cet article ).

Je pense que vous devez demander requireAdministrator dans votre manifeste d’application

Si vous déplacez complètement le curseur UAC dans “Paramètres du contrôle de compte d’utilisateur”, cela signifie que le contrôle de compte d’utilisateur n’indique aucune invite, mais qu’il est toujours activé. Tout processus normal fonctionne toujours sans privilèges administratifs, mais l’élévation (par “exécuter en tant qu’administrateur” ou par avoir déclaré “requireAdministrator”) aura lieu sans le consentement de l’utilisateur.

Désactiver la stratégie de sécurité “Contrôle de compte d’utilisateur: Exécuter tous les administrateurs en mode d’approbation administrateur” ou définir la clé de registre “EnableLUA” sur 0 modifiera ce comportement, mais empêchera toutes les applications de Metro Modern UI de s’exécuter.

Si vos utilisateurs ne disposent pas de droits d’administrateur, vous ne pouvez pas modifier l’horloge système sans utiliser un service.

Si vous souhaitez que votre application démarre normalement (mais sans droits spéciaux) pour les utilisateurs normaux et (auto) Elevate pour les administrateurs, vous pouvez déclarer “le plus élevé des disponibilités” dans votre manifeste.