2010-01-16 5 views
0

J'ai posté plus tôt sur la façon de faire cela, et j'ai obtenu de bonnes réponses, et j'ai réussi à obtenir le code écrit basé sur l'exemple MSDN. Cependant, cela ne semble pas fonctionner correctement. Il imprime le message ERROR_ACCESS_DENIED, mais je ne sais pas pourquoi, car je le gère en tant qu'administrateur complet. Au départ, j'essayais de créer un USER_PRIV_ADMIN, mais le MSDN m'a dit qu'il ne pouvait utiliser que USER_PRIV_USER, mais malheureusement, aucun d'entre eux ne fonctionne. Je espère que quelqu'un peut repérer une erreur ou a une idée.C++ NetUserAdd() ne fonctionne pas?

Merci!

void AddRDPUser() 
{ 
    USER_INFO_1 ui; 
    DWORD dwLevel = 1; 
    DWORD dwError = 0; 
    NET_API_STATUS nStatus; 

    ui.usri1_name = L"DummyUserAccount"; 
    ui.usri1_password = L"a2cDz3rQpG8"; 
    //ignored by NetUserAdd 
    //ui.usri1_password_age = -1; 
    ui.usri1_priv = USER_PRIV_USER; //USER_PRIV_ADMIN; 
    ui.usri1_home_dir = NULL; 
    ui.usri1_comment = NULL; 
    ui.usri1_flags = UF_SCRIPT; 
    ui.usri1_script_path = NULL; 

    nStatus = NetUserAdd(NULL, dwLevel, (LPBYTE)&ui, &dwError); 

    switch (nStatus) 
    { 
     case NERR_Success: 
     { 
      Msg("SUCCESS!\n"); 
      break; 
     } 
     case NERR_InvalidComputer: 
     { 
      fprintf(stderr, "A system error has occurred: NERR_InvalidComputer\n"); 
      break; 
     } 
     case NERR_NotPrimary: 
     { 
      fprintf(stderr, "A system error has occurred: NERR_NotPrimary\n"); 
      break; 
     } 
     case NERR_GroupExists: 
     { 
      fprintf(stderr, "A system error has occurred: NERR_GroupExists\n"); 
      break; 
     } 
     case NERR_UserExists: 
     { 
      fprintf(stderr, "A system error has occurred: NERR_UserExists\n"); 
      break; 
     } 
     case NERR_PasswordTooShort: 
     { 
      fprintf(stderr, "A system error has occurred: NERR_PasswordTooShort\n"); 
      break; 
     } 
     case ERROR_ACCESS_DENIED: 
     { 
      fprintf(stderr, "A system error has occurred: ERROR_ACCESS_DENIED\n"); 
      break; 
     } 
    } 
} 

Répondre

0

Est-ce que vous vista os ou gagner 7 ?, si oui, alors vous devrez peut-être augmenter votre niveau de privilège.

+0

Windows 7, il sera en cours d'exécution sur le serveur 2008 cependant. Je n'étais pas au courant de cela, je suppose que j'irai essayer là-bas à la place et voir si cela fonctionne réellement. Merci :) –

0

Votre code fonctionne!

ScreenShot,Succeed:

enter image description here

I modifié votre code:

1)

case NERR_Success: 
    { 
     fprintf(stderr, "Succeed!\n"); 
     break; 
    } //I don't know where Msg belongs to....but you should be correct 

2) Je mets tout votre code à l'intérieur main() parce que je me souviens que je l'ai fait quelques tests montrant que certains objets ne peuvent pas être créés en dehors de main(), je suppose que c'est la raison pour laquelle ça ne marcherait pas. Je ne suis pas sûr ... Voyez si cela fonctionne pour vous aussi.

3) J'ai lu le lien à l'intérieur de la page MSDN NetUserAdd, il dit que NetUserAdd ne peut pas créer ADMIN, je ne sais pas pourquoi non plus, mais je peux le citer pour vous. Lorsque vous appelez la fonction NetUserAdd, ce membre doit être USER_PRIV_USER.

lien: https://msdn.microsoft.com/en-us/library/windows/desktop/aa371109(v=vs.85).aspx