2010-12-02 4 views
0

Nous venons de découvrir que le code qui appelle la fonction Win32 SetDateTime a besoin de fonctionner en mode élevé dans Windows 7, ce même lorsque vous êtes connecté en tant qu'administrateur, il reste doit choisissez d'exécuter le code de date fixe en tant qu'administrateur pour l'appel afin de changer la date.Comment appeler une API Win32 avec priviledges élevée sur Windows 7

Y at-il quelque chose que je peux faire dans le code pour toujours appeler cette fonction sous privilèges élevés?

Répondre

1

Ce n'est pas comme ça que la sécurité fonctionne. Changement de l'horloge est une opération très intrusive, il a un très grand nombre d'effets secondaires. Il n'y a pas de mécanisme dans Windows, ou tout autre système d'exploitation, où vous pourriez démarrer un processus avec des privilèges limités, puis contourner arbitrairement ces limitations et obtenir soudainement des droits d'administrateur. Il ne servirait à rien d'exécuter des programmes avec des privilèges limités si cela était possible.

Si vous voulez faire quelque chose comme cela, alors vous devrez exécuter votre programme avec des droits élevés. Sur Vista et Win7 qui vous oblige à exécuter en tant que service ou une tâche planifiée. Qui nécessitent un administrateur pour être installé. UAC fournit un moyen d'obtenir des droits d'administrateur pour les programmes réguliers, vous devez inclure un manifeste dans votre programme afin que l'utilisateur soit informé de votre élévation de privilèges. Google 'requireadministrator', prenez le premier coup.

+0

Je suis tout à fait conscient des risques de changement d'horloge, mais mon intérêt est de pouvoir le faire à distance, même par un appel de service Web sécurisé. Je demande comment je peux installer mon code pour exécuter avec les privilèges nécessaires lors de l'appel. Je vais regarder mon code comme un service Windows, que le service web peut en quelque sorte activer ou régler pour changer une date ou une heure. – ProfK

2

Vous pouvez utiliser l'appel de l'API ShellExecute pour lancer un exécutable avec des privilèges élevés.

Toutefois, si UAC (contrôle d'accès utilisateur) est activé sur la machine, l'utilisateur sera toujours RECEVEZ le contrôle de compte demander des autorisations pour exécuter élevées.

donc je ne pense pas que vous pouvez éviter l'invite pour l'autorisation d'élévation, mais au moins votre utilisateur n'a pas à exécuter manuellement le programme en tant qu'administrateur.

S'il vous plaît laissez-moi savoir si vous avez besoin d'aide sur la façon de lancer un exécutable en tant qu'admin.

+0

Il n'y a pas d'invite d'élévation et je ne souhaite pas lancer d'exécutable. Je veux appeler une fonction API en mode élevé. – ProfK

+0

Je pense que c'est impossible, et vous ne pouvez "passer" à un contexte élevé dans le cadre d'un processus. J'ai été surpris d'apprendre cela quand j'avais besoin d'exécuter du code élevé. – Ran

+0

L'invite UAC d'appel de l'API Elevated ne s'affichera que si votre processus principal n'est pas déjà en cours d'exécution en mode élevé, mais en voyant votre question dans ce cas. – Machinarius

0

Comme d'autres l'ont dit, vous avez besoin de lancer un nouveau processus pour obtenir des autorisations élevées, ce qui se traduira par une boîte de dialogue UAC.

Si cela est quelque chose que vous devez exécuter sans surveillance, vous pouvez essayer d'exécuter en tant que service. Cela vous donnerait le contexte élevé dont vous avez besoin.