Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Не создается новый пользователь


Автор: Barabeo 29.10.2012, 15:44
Пытаюсь создать нового пользователя. Но код завершается с ошибкой A system error has occurred:5.
Насколько я понял нужны права администратора. Или я не прав? Как их получить программно?
Код

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <lm.h>
#include <sstream>
#include <string.h>

using namespace std;

#pragma comment(lib, "netapi32.lib")

int main(int argc, char** argv)
{
    char compname[MAX_COMPUTERNAME_LENGTH+1];
    char temp[MAX_COMPUTERNAME_LENGTH+2];
    DWORD size = sizeof(compname)-1;
    int i,j,k,m;
        wchar_t servername[MAX_COMPUTERNAME_LENGTH+1];
    wchar_t username[MAX_COMPUTERNAME_LENGTH+2];
    wchar_t userpass[MAX_COMPUTERNAME_LENGTH+2];

    GetComputerNameA(compname,&size);//получаем имя компа
    /*
    if( !GetComputerNameA(compname,&size) )
    {
    printf( "Error of  GetComputerNameA\n" );
    return -1;
    }
    compname[MAX_COMPUTERNAME_LENGTH] = '\0';
    */
    printf("%s\n",compname);
    temp[0]='u';//добавляем букву 'u' к имени компа
    for(i=1,j=0; j<MAX_COMPUTERNAME_LENGTH; i++, j++)
    {
         temp[i] = compname[j];
    }
    temp[i]= '\0';
    printf ("%s\n",temp);//выводим имя которое будет присвоено пользователю
    
    //создаем пользователя
    USER_INFO_1 ui;
    DWORD dwLevel = 1;
    DWORD dwError = 0;
    NET_API_STATUS nStatus;
    
    //кoнвертируем имя пользователя из char в wchar_t
    MultiByteToWideChar(CP_ACP, 0, temp, MAX_COMPUTERNAME_LENGTH+2, username, MAX_COMPUTERNAME_LENGTH+2);

      //кoнвертируем имя компа из char в wchar_t
    MultiByteToWideChar(CP_ACP, 0, compname, MAX_COMPUTERNAME_LENGTH+1, servername, MAX_COMPUTERNAME_LENGTH+1);

    //устанавливаем пароль пользователю
    for(k=0,m=1; m<MAX_COMPUTERNAME_LENGTH; k++, m++)
    {
         userpass[k] = compname[m];
    }

    ui.usri1_name = username;    
    ui.usri1_password = userpass;
    ui.usri1_priv = USER_PRIV_USER;
    ui.usri1_home_dir = NULL;
    ui.usri1_comment = NULL;
    ui.usri1_flags = UF_SCRIPT;
    ui.usri1_script_path = NULL;
    //добавляем пользователя
    nStatus = NetUserAdd(servername, dwLevel,(LPBYTE)&ui,&dwError);

    if (nStatus == NERR_Success)
       fwprintf(stderr, L"User %s has been successfully added on %s\n",
               userpass, username);
 
    else
       fprintf(stderr, "A system error has occurred: %d\n", nStatus);

    system("pause");
    return 0;
}

Автор: NoviceF 29.10.2012, 16:12
Вряд ли тут дело в c++, а права администратора у приложения должны быть, если его запустить из под администратора (правой кнопкой -> запустить от имени -> администратор).

Автор: Barabeo 29.10.2012, 16:30
Цитата(NoviceF @ 29.10.2012,  16:12)
Вряд ли тут дело в c++, а права администратора у приложения должны быть, если его запустить из под администратора (правой кнопкой -> запустить от имени -> администратор).

Точно. Забыл что в семёрке запускал.

Автор: aretha 31.10.2012, 01:34
странно я запускаю из под админа,но ошибка такая же. видимо я что то в коде накосячил! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)