6
votes

Comment vérifier si mon programme est dirigé par l'utilisateur en tant qu'administrateur (Vista / Win7, C ++)

J'ai vu la méthode Isinrole, mais je ne trouve pas d'informations sur la manière de l'utiliser avec C ++.


0 commentaires

4 Réponses :


2
votes

Il y a un extrait de code C ++ dans Cette ancienne réponse tiré du Projet UachelPers sur CodePlex.


0 commentaires

-1
votes

Vous pouvez essayer ce morceau de code. Il donne un croquis de ce qui doit être fait: xxx


4 commentaires

Ce code est le moyen NT4 de vérifier si un SID fait partie d'un jeton d'utilisateurs, il ne fonctionne pas correctement sur les systèmes plus récents et ne doit pas être utilisé. Voir le lien de Rup pour ma réponse et quelle fonction d'appeler ...


@Anders: Cela fonctionne sur Windows XP, Windows Vista et Windows 7. Ce code a été testé de manière plutôt intensive sur ces trois systèmes. Pourquoi pensez-vous que cela ne fonctionnerait pas?


Je sais que c'est cassé, alors vous venez de ne pas tester correctement. Il y a une chose appelée SID de NYY-SEUL et votre code actuel ne gère pas ceux-ci, vous êtes censé utiliser CheckTokenMembership.


-1: Oui, ce code est cassé depuis Windows 2000 et l'introduction de jetons soumis à des appels restreints. (Vérifiez MSDN: CreeherSestrilléesToken). Un jeton a une liste d'adhésions de groupe. Chaque groupe de jetons a également une variable de drapeau pouvant contenir se_group_use_for_deny_only. Si cet indicateur est défini pour un groupe Windows utilisera le groupe de vérification d'accès uniquement pour refuser les éléments de contrôle d'accès (ACES). Donc, une adhésion à un groupe d'administration avec Se_group_use_for_deny_only ne sera pas en mesure d'accéder à une ressource avec Autoriser ACE. La solution consiste à rechercher ce drapeau dans votre code en plus ou à utiliser CheckTokenMembership.



1
votes

La documentation de ISUSERANADMIN Explique que cela est obsolète depuis Vista, mais vous pointe de CheckTokenMemberShip . Cela devrait faire le travail pour vous.


0 commentaires

2
votes

Ce code résout votre problème. Sentez-vous libre de l'utiliser. Cela fonctionne avec Se_group_use_for_deny_only. XXX


0 commentaires