Question

J'ai lu plusieurs questions concernant l'élévation et le privilège, mais contrôle de compte je n'ai pas trouvé une réponse satisfaisante / complète.

J'ai ce scénario: sous Windows 6 ou au-dessus, lorsque l'utilisateur ouvre une fenêtre de configuration que je dois montrer le bouclier (BCM_SETSHIELD) sur le bouton OK uniquement si l'élévation de privilège sera tenu de remplir la tâche. -. Je ne sais que dans l'interface utilisateur de Windows l'écran est toujours visualisé pour « tâches administratives », même si l'UAC est désactivé, mais le client a cette demande spécifique

J'ai rédiger cette condition afin de Afficher l'icône:

  1. L'utilisateur a pas droits d'administration
    ou
  2. Le processus actuel a TOKEN_ELEVATION_TYPE == TokenElevationTypeLimited

La condition # 1 est simple: si l'utilisateur n'a pas l'élévation des droits d'administration est toujours nécessaire quel que soit l'UAC. Le # 2 implique que l'utilisateur dispose des droits d'administration, ainsi que toute autre valeur des moyens de TOKEN_ELEVATION_TYPE que l'élévation n'est pas nécessaire.

Est-ce vraiment si simple? Il me manque quelque chose? Et - il y a un modèle documenté ou bien connu en ce qui concerne ce sujet

Était-ce utile?

La solution

Vous avez raison. La plupart des gens ont juste le bouclier si le bouton est en cours d'exécution élevé, mais la bonne chose à faire est de mettre le bouclier si le bouton provoque l'élévation (ie supprimer si vous êtes déjà élevée, car tout ce que vous lancement reste élevé à moins que vous allez à une peine de lancer un processus non élevée, et le supprimer si UAC est désactivé.)

Les bonnes nouvelles sont que si quelqu'un dans une élévation non-application, les courses du groupe Administrateurs (sous UAC), vous récupérerez false lorsque vous demandez si elles sont un administrateur ou non. Donc, je pense que vous pourriez être ok avec juste qu'un test.

Autres conseils

Je vois qu'il ya beaucoup de confusion à ce sujet et la réponse de Kate ici est incorrecte et incomplète.

Depuis Vista un administrateur peut être connecté, mais ses processus ne est pas exécuté automatiquement élevé. Un administrateur a un soi-disant « jeton de Split ». Cela signifie qu'il ya peut-être en cours d'exécution pour les processus de l'utilisateur admin mêmes, et certains d'entre eux courent élevé et d'autres NE PAS faire fonctionner élevée. Lorsqu'un administrateur exécute un processus non élevé, certains des privilèges de ses jetons ont été retirés. Il n'est pas plus que dans XP, où tous les processus exécutés soit élevé ou non élevé.

Installer Process Explorer www.sysinternals.com et activer la colonne "niveau d'intégrité". Si vous voyez « Medium » ce processus ne fonctionne pas élevé. Si vous voyez là-bas « High » les pistes de processus élevés. Si les pistes de processus avec le niveau d'intégrité « High » ne invite UAC est nécessaire pour démarrer un autre processus élevé.

Lorsque UAC est complètement éteint, tous les processus exécutés « High », donc pas d'élévation est nécessaire jamais. Peut être UAC désactivée sous

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System

réglage de la touche "EnableLUA". La modification de ce paramètre nécessite le redémarrage.

Mais il y a un autre point qui n'a pas encore mentionné ici. Dans le panneau de contrôle, il est possible de configurer « Elevate sans demander ». Et dans ce cas, un utilisateur Admin peut commencer un processus élevé d'un autre processus non élevé et NO UAC rapide sera affiché.

Ce paramètre est stocké dans le même chemin de registre dans la clé « ConsentPromptBehaviorAdmin » pour les utilisateurs d'administration.

Pour tous les utilisateurs non-admin il est la clé « ConsentPromptBehaviorUser » mais cela ne change que la bahavior, mais l'élévation ne peut pas être désactivé. Non-admins seront toujours une invite UAC. (Si UAC est pas complètement)

Comment savez-vous si vos courses de processus élevé: Appel OpenProcess(), puis OpenProcessToken(), puis GetTokenInformation(TokenElevation).

Et pour obtenir l'appel du niveau d'intégrité GetTokenInformation(TokenIntegrityLevel) puis GetSidSubAuthority()

Donc, si vous voulez montrer l'icône que si l'élévation est vraiment nécessaire, vous devez vérifier si l'exécution de votre processus élevé et vérifier en outre ces clés de registre et vous devez savoir si l'utilisateur est un administrateur ou non. Ce involes plusieurs lignes de code et je considère montrer cette icône toujours quand l'élévation peut être nécessaire pour le garder simple.

S'il vous plaît noter que le IsUserAnAdmin() API est dépréciée. Il ne doit pas être utilisé plus depuis Vista. Vérifiait si un utilisateur appartient au groupe d'administrateurs est beaucoup plus par code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top