IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

vérification des droits


Sujet :

Windows

  1. #1
    Membre régulier Avatar de zolotaya
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 93
    Points : 78
    Points
    78
    Par défaut vérification des droits
    Bon voila, pour les besoins d'un programme, j'aurais besoin de vérifier si l'utilisateur à les droits d'administration sous windows.
    Je souhaitrais pouvoir réaliser ce programme en C.
    Cependant je n'ai pour le moment trouvé aucune fonction qui permettais cela.
    Quelqu'un pourrait t'il m'orrienté dans mes recherche? (fonctions et/ou librairies)
    En esperant avoir une petite aide.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le problème, c'est que "les droits d'administrations", ça ne veut pas dire "un seul truc". Mais en gros, un utilisateur a les droit d'administration s'il est membre du groupe Administrateurs.
    Ça, ce doit être consultable avec entres autres Active Directory (ADSI) ou peut-être aussi avec les fonctions commençant par Net...

    Sinon, tu peux à la place tester si l'utilisateur a les droits là où tu veux agir: Dossiers système, etc.
    Enfin, tu peux tester la présence ou non de privilèges d'administration avec des fonctions liées à OpenProcessToken(), LookupPrivilegeValue(), AdjustTokenPrivileges(), etc.
    Ces examens "Fins" dépendent de ce que tu veux faire précisément. Mais pour savoir simplement si un utilisateur est un administrateur ou non, il vaut mieux chercher du coté des groupes.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier Avatar de zolotaya
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 93
    Points : 78
    Points
    78
    Par défaut
    J'ai reussi à creer un petit programme qui creer un dossier d'un nom quelconque dans un fichier systeme, je regarde aprés ce que ca renvoi, si il est creer la personne à les droits d'administration, sinon elle ne les a pas, et pour eviter de foutre le bordel et les erreurs en cas de plusieurs lancements je le supprime aprés. En gros simple et efficace.

    Merci comme meme pour votre aide.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Points : 65
    Points
    65
    Par défaut
    si ca peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include <windows.h>
    #include <stdio.h>
    
    BOOL IsUserAdmin() 
    {
      HANDLE hToken;
      DWORD dwGroups;
      PTOKEN_GROUPS pGroups;
      SID_IDENTIFIER_AUTHORITY NtAuthority = { SECURITY_NT_AUTHORITY };
      PSID pAdministrators;
      UINT i = 0;
      if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) == 0) {
        return FALSE;
      }
      GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwGroups);
      if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
        CloseHandle(hToken);
        return FALSE;
      }
      pGroups = LocalAlloc(LMEM_FIXED, dwGroups);
      if (pGroups == NULL) {
        CloseHandle(hToken);
        return FALSE;
      }
      if (GetTokenInformation(hToken, TokenGroups, pGroups, dwGroups, &dwGroups) == 0) {
        CloseHandle(hToken);
        LocalFree(pGroups);
        return FALSE;
      }
      if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdministrators) == 0) {
        CloseHandle(hToken);
        LocalFree(pGroups);
        return FALSE;
      }
      if (IsValidSid(pAdministrators) == 0) {
        CloseHandle(hToken);
        LocalFree(pGroups);
        FreeSid(pAdministrators);
        return FALSE;
      }
      while (i < pGroups->GroupCount) {
        if (IsValidSid(pGroups->Groups[i].Sid) != 0 && EqualSid(pGroups->Groups[i].Sid, pAdministrators) != 0) {
          CloseHandle(hToken);
          LocalFree(pGroups);
          FreeSid(pAdministrators);
          return TRUE;
        }
        ++i;
      }
      CloseHandle(hToken);
      LocalFree(pGroups);
      FreeSid(pAdministrators);
      return FALSE;
    }
    
    int main(void) 
    {
      printf("admin : %s\n", (IsUserAdmin() == FALSE) ? "yes" : "no");
      system("PAUSE");
      return 0;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérification des droits d'accès sur un fichier ou vers un repertoire
    Par subzero82 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 15/04/2011, 13h51
  2. Vérification des droits d'exécution d'un VBS
    Par jbaudin dans le forum VBScript
    Réponses: 2
    Dernier message: 14/08/2007, 15h30
  3. Vérification des droits d'accès à un répertoire
    Par in dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/07/2007, 10h52
  4. [VB6] Vérification des droits de lecture/écriture sur répert
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 01/02/2006, 18h41
  5. Configuration des droits pour samba avec ftp et www
    Par Alkmie dans le forum Réseau
    Réponses: 2
    Dernier message: 07/11/2004, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo