2010-11-16 24 views
7

Comment puis-je vérifier si un processus a des privilèges élevés dans Windows 7 (en utilisant C++ natif, pas C#/C++. Net)?Comment vérifier si un processus a des privilèges élevés dans Windows 7 en utilisant C++ natif?

J'ai cherché une réponse assez souvent, mais tout ce que je peux trouver sont les réponses qui utilisent le framework .NET.

+1

Définir 'élevé'. Privilège? Priorité? Autre chose? –

+0

@Steve: Basé sur l'autre réponse, c'est une excellente question. Je pensais simplement que OP signifiait «priorité élevée» et que cela pouvait être complètement faux. –

+0

Également peu clair: votre processus ou un autre? –

Répondre

7

L'approche la plus simple consiste à appeler la fonction IsUserAnAdmin. Si vous avez besoin de plus de précision, vous pouvez aussi utiliser GetTokenInformation mais dans la plupart des cas, c'est trop.

+1

Kenny a raison et c'est facile à tester. Ecrire une application qui imprime si vous êtes un administrateur ou non et exécutez-le élevé et non, connecté en tant qu'administrateur et un utilisateur régulier (qui aura besoin d'OTS pour élever). Vous verrez dans quatre exécutions rapides que vous êtes considéré comme un admin si l'application est élevée, indépendamment de qui s'est d'abord connecté à la machine. –

+0

FWIW, la dernière recommandation sur l'article MSDN est d'utiliser CheckTokenMembership. _Cette fonction est un wrapper pour CheckTokenMembership. Il est recommandé d'appeler cette fonction directement pour déterminer le statut du groupe Administrateur plutôt que d'appeler IsUserAnAdmin. _ – susmits

+0

@KateGregory Merci d'avoir expliqué cela si simplement; la documentation MSDN implique qu'il vérifie les privilèges de l'utilisateur propriétaire (administrateur propriétaire ou non), mais comme vous l'expliquez, cela n'est pas correct. – wizzwizz4