Avatar billede jakobdo Ekspert
16. december 2003 - 15:33 Der er 2 kommentarer og
1 løsning

Tilføje en windows bruger med kode.

Hej,
jeg har siddet og leget lidt, og jeg kan sagtens tilføje en bruger på min computer, som hedder Test og som har password Test...

Men nu ville jeg lave det med kode...
Jeg har lavet følgende:

#include <stdio.h>
#include <windows.h>
#include <lm.h>
#include <wchar.h>


void ShowLastError(LPVOID caption);

int main(int argc, char **argv)
{
    NET_API_STATUS nStatus;
   
    DWORD dwLevel = 1;
    USER_INFO_1 buf;
   
    char UserName[] = "Test";
    WCHAR wszUserName[UNLEN+1];
   
    MultiByteToWideChar( CP_ACP, 0, UserName, strlen(UserName)+1, wszUserName, sizeof(wszUserName)/sizeof(wszUserName[0]) );
   
    buf.usri1_name = wszUserName;
    buf.usri1_password = wszUserName;
    buf.usri1_priv = USER_PRIV_ADMIN;
    buf.usri1_home_dir = NULL;
    buf.usri1_comment = wszUserName;
    buf.usri1_flags = UF_SCRIPT;
    buf.usri1_script_path = NULL;
       
    nStatus = NetUserAdd(NULL, dwLevel,    (LPBYTE)&buf, NULL);
    if (nStatus == NERR_Success)
        printf("Det gik godt!\n");
    else
    {
        printf("Det gik ikke godt, vi fik fejlen: %d\n",nStatus);
    }
}

Men jeg får fejl 87 smidt i hovedet... Hvis jeg bruger FormatMessage, får jeg fejl: Overlapped I/O operation is in progress. (ved ikke om denne fejl er rigtig eller ej...)

Men hvad skal jeg gøre for at få det til at virke?
Avatar billede driis Nybegynder
16. december 2003 - 17:58 #1
Jeg tror det skyldes:
buf.usri1_priv = USER_PRIV_ADMIN;
Idet der i dokumentationen står:
When you call the NetUserAdd function, this member must be USER_PRIV_USER.

Følgende virker:
-
#include <iostream>
#include <windows.h>
#include <lm.h>
using namespace std;

#define errMax 1024

int main()
{
    DWORD errLoc = 0 ;
    NET_API_STATUS nStatus;
    USER_INFO_1 usr = {0};
    char name[] = "Test2";
    WCHAR usrName[UNLEN];

    MultiByteToWideChar(CP_ACP,0,name,sizeof(name),usrName,UNLEN);

    usr.usri1_flags = UF_SCRIPT | UF_NORMAL_ACCOUNT ;
    usr.usri1_priv = USER_PRIV_USER;
    usr.usri1_name = usrName;
    usr.usri1_password = usrName;
   
    nStatus = NetUserAdd(NULL,1,(LPBYTE)&usr,&errLoc);
    if ( nStatus == NERR_Success )
        cout << "User '" << name << "' oprettet.\n" ;
    else
    {
        char errBuf[errMax];
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,nStatus,0,errBuf,errMax,0);
        cout << "Fejl : " << nStatus << endl << errBuf << endl;
    }
   
    return 0;
}
Avatar billede jakobdo Ekspert
16. december 2003 - 19:12 #2
Hvor svært kan det være! :o)
Og min kode virker faktisk... :o)
Avatar billede jakobdo Ekspert
16. december 2003 - 19:12 #3
Når jeg lige ændrede Admin til User!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester