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

C Discussion :

PB COMPLEXE : Un equivalent à getgid sous windows?


Sujet :

C

  1. #1
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut [Résolu] PB COMPLEXE : Un equivalent à getgid sous windows?
    Je connais la fonction GetUserName qui renvoie le nom de l'utilisateur loggué sous windows. Or GetUserGroup n'existe pas alors que cette fonction existe sous Unix sous la forme de getgid je crois.

    Quelqu'un connaîtrait il un moyen de récupérer ce groupe sous windows?

  2. #2
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut Bon apperemment personne ne connait la réponse
    Apparemment ce problème est encore plus complexe que je le pensais, cela fait très longtemps que je cherche et personne ne semble trouver de réponse (cela commence à me saouler d'ailleurs). Dire qu'il suffit d'une ligne de code sous Linux!!!

    Si personne ne sait où trouver la réponse, peut-être savez vous où je pourrais trouver des infos sur comment est stocké sous Windows le nom de l'utilisateur loggué et son groupe. Ce que je veux dire, c'est par exemple est-ce que je dois aller lire cela dans une variable d'environnement (cela ne semble pas être le cas), dans la base de registres (j'ai pas trouvé), ou ailleurs....

    Enfin, peut-être dois-je plutôt poster ce message sur un autre sous-forum sous developpez.com, dans ce cas lequel??? Windows?

    Merci d'avance, je désespère.

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Avez vous essayé avec les API

    NetUserGetLocalGroups
    NetUserGetGroups

    Salut

  4. #4
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut On essaie...
    C'est ce que je fais avec ce code (trouvé sous MSDN). Le problème, c'est que je ne sais pas trop comment initialiser la variable "user".


    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
       LPLOCALGROUP_USERS_INFO_0 pBuf = NULL;
       DWORD dwLevel = 0;
       DWORD dwFlags = LG_INCLUDE_INDIRECT ;
       DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
       DWORD dwEntriesRead = 0;
       DWORD dwTotalEntries = 0;
       NET_API_STATUS nStatus;
       LPCWSTR user;
     
       //
       // Call the NetUserGetLocalGroups function 
       //  specifying information level 0.
       //
       //  The LG_INCLUDE_INDIRECT flag specifies that the 
       //   function should also return the names of the local 
       //   groups in which the user is indirectly a member.
       //
       nStatus = NetUserGetLocalGroups(NULL,
                                       user,
                                       dwLevel,
                                       dwFlags,
                                       (LPBYTE *) &pBuf,
                                       dwPrefMaxLen,
                                       &dwEntriesRead,
                                       &dwTotalEntries);
       //
       // If the call succeeds,
       //
       if (nStatus == NERR_Success)
       {
          LPLOCALGROUP_USERS_INFO_0 pTmpBuf;
          DWORD i;
          DWORD dwTotalCount = 0;
     
          if ((pTmpBuf = pBuf) != NULL)
          {
             fprintf(stderr, "\nLocal group(s):\n");
             //
             // Loop through the entries and 
             //  print the names of the local groups 
             //  to which the user belongs. 
             //
             for (i = 0; i < dwEntriesRead; i++)
             {
                assert(pTmpBuf != NULL);
     
                if (pTmpBuf == NULL)
                {
                   fprintf(stderr, "An access violation has occurred\n");
                   break;
                }
     
                wprintf(L"\t-- %s\n", pTmpBuf->lgrui0_name);
     
                pTmpBuf++;
                dwTotalCount++;
             }
          }
             //
             // If all available entries were
             //  not enumerated, print the number actually 
             //  enumerated and the total number available.
             //
          if (dwEntriesRead < dwTotalEntries)
             fprintf(stderr, "\nTotal entries: %d", dwTotalEntries);
          //
          // Otherwise, just print the total.
          //
          printf("\nEntries enumerated: %d\n", dwTotalCount);
       }
       else
          fprintf(stderr, "A system error has occurred: %d\n", nStatus);
       //
       // Free the allocated memory.
       //
       if (pBuf != NULL)
          NetApiBufferFree(pBuf);

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    En utilisant la version unicode de GetUserName?

    GetUserNameW

    Salut

  6. #6
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut Pas tout à fait
    J'y ai évidemment pensé, mais le problème, c'est que le nom de l'user est de type LPCWSTR, un short en fait, tandis que le GetUserName retourne l'user sous la forme d'un LPTSTR, une String quoi. Et c'est justement là que je n'arrive pas à faire la relation entre ces deux quantités.

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Si vous testez ce code, vous verrez bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <Windows.h>
     
     
    int main()
    {
    	LPWSTR user = (LPWSTR) new WCHAR[100];
    	DWORD Size = sizeof(WCHAR)*100;
    	GetUserNameW(user,&Size);
    	wprintf(L"%s\n",user);
    	return 0;
    }
    Salut

  8. #8
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut Merci
    Merci pour tout, cela fait exactement ce que je voulais

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

Discussions similaires

  1. Commande equivalent find sous windows powershell
    Par laoho dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 02/03/2012, 09h53
  2. Equivalent à SetSystemTime sous windows CE 6.0 ?
    Par altahir007 dans le forum VB.NET
    Réponses: 1
    Dernier message: 10/10/2011, 11h27
  3. Equivalent IPtables et Netfilter sous windows
    Par AkH dans le forum Sécurité
    Réponses: 3
    Dernier message: 15/02/2008, 19h45
  4. équivalence langage sous linux et langage sous windows
    Par crevettekivsm dans le forum Windows XP
    Réponses: 5
    Dernier message: 26/10/2006, 22h30

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