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 :

Créér un utilisateur capable de se logguer


Sujet :

Windows

  1. #1
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut Créér un utilisateur capable de se logguer
    Bonjour à tous,
    voilà j'essaye de créer directement d'un programme Windows en C++ un utilisateur. Je ne suis pas très à l'aise avec la WinAPI encore ( en C++ par contre aucun soucis ) mais en me servant de la fonction NetUSerAdd() en suivant l'exemple donné ici j'arrive à créer un utilisateur Windows. Malheureusement, Windows ne me le propose pas pour me loguer lorsque je quitte la session ou redémarre le pc, comme quand on le crée de manière classique avec le panneau de configuration.
    Es-ce que quelqu'un pourrait m'éclairer, il est fort possible que j'ai prit une mauvaise voie. Ou peut être es ce plus simple en .NET ou en utilisant une librairie quelconque ? Peut-être es ce aussi un problème de groupe.. ?
    Merci d'avance pour vos réponses. J'ajoute le code légèrement modifié que j'utilise sur Code::Blocks :

    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
    #ifndef UNICODE
    #define UNICODE
    #endif
    
    #include <stdio.h>
    #include <windows.h>
    #include <lm.h>
    
    //int wmain(int argc, wchar_t *argv[])
    int main()
    {
       int argc;
       wchar_t** argv = CommandLineToArgvW( GetCommandLineW(), &argc);
    
       USER_INFO_1 ui;
       DWORD dwLevel = 1;
       DWORD dwError = 0;
       NET_API_STATUS nStatus;
    
       if (argc != 3)
       {
          fwprintf(stderr, L"Usage: %s UserName\n", argv[0]);
          exit(1);
       }
       //
       // Set up the USER_INFO_1 structure.
       //  USER_PRIV_USER: name identifies a user,
       //    rather than an administrator or a guest.
       //  UF_SCRIPT: required
       //
       ui.usri1_name = argv[1];
       ui.usri1_password = argv[1];
       ui.usri1_priv = USER_PRIV_USER;
       ui.usri1_home_dir = NULL;
       ui.usri1_comment = NULL;
       ui.usri1_flags = UF_SCRIPT | UF_NORMAL_ACCOUNT;
       ui.usri1_script_path = NULL;
       //
       // Call the NetUserAdd function, specifying level 1.
       //
       nStatus = NetUserAdd(NULL,
                            dwLevel,
                            (LPBYTE)&ui,
                            &dwError);
       //
       // If the call succeeds, inform the user.
       //
       if (nStatus == NERR_Success)
          fwprintf(stderr, L"User %s has been successfully added\n",
                   argv[1]);
       //
       // Otherwise, print the system error.
       //
       else
        {
          fprintf(stderr, "A system error has occurred: %d\n", nStatus);
          return 1;
        }
    
    
        nStatus = NetGroupAddUser( NULL,argv[2],argv[1]);
        if (nStatus == NERR_Success)
            fwprintf(stderr, L"User %s has been successfully added to group %s\n",argv[1],argv[2]);
        else
        {
          fprintf(stderr, "A system error has occurred: %d\n", nStatus);
          return 1;
        }
    
       return 0;
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Pouvez-vous faire des ZeroMemory sur les structures Win32 que vous utilisez avant de vous en servir ?
    Par esemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    USER_INFO_1 ui;
    Zeromemory(&ui,sizeof(ui));

  3. #3
    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 518
    Points
    41 518
    Par défaut
    Sous XP familial, un utilisateur doit être dans le groupe Utilisateurs ou Administrateurs (et ne pas être l'Administrateur avec un grand A) pour apparaître dans la liste. Tu dois donc l'ajouter dans ce groupe. Je sais le faire avec Active Directory Services (en COM), mais pas avec les fonctions Net*, que je n'ai jamais regardées.

    Que dit ton programme, au niveau de l'ajout dans le groupe?
    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.

  4. #4
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut
    Merci pour vos réponses, en particulier Médinoc. J'ai finalement réussit à résoudre mon petit soucis. En effet il suffit d'ajouter le compte au groupe Utilisateurs via la fonction NetLocalGroupAddMembers() et je peux maintenant le logguer correctement.
    Je me pose malgré tout une question, comment connaître le nom du groupe utilisateurs ? car si sous mon windows XP comme mon windows 7 en français c'est bien "Utilisateurs", je suppose que sur une version anglaises ce serra "Users" très certainement, et qu'il doit y avoir des déclinaisons dans toutes les langues. J'aimerais que mon code puisse marcher partout sans avoir à le paramétrer, peut être quelqu'un aurait une réponse ?

  5. #5
    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 518
    Points
    41 518
    Par défaut
    Utilise son SID à la place, tu as ensuite des fonctions pour convertir (LookupAccountName()/LookupAccountSid()).

    Les SIDs des groupes comme "utilisateurs" et "administrateurs" sont des well-known SIDs, ils ne changent jamais.
    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.

Discussions similaires

  1. Réponses: 15
    Dernier message: 02/04/2014, 14h39
  2. Réponses: 0
    Dernier message: 29/11/2011, 14h28
  3. Réponses: 6
    Dernier message: 12/11/2010, 23h58
  4. Réponses: 6
    Dernier message: 19/03/2008, 21h48
  5. Réponses: 3
    Dernier message: 28/02/2007, 14h05

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