C ++ NetUserAdd () не работает? - PullRequest
0 голосов
/ 16 января 2010

Ранее я писал о том, как это сделать, и получил несколько хороших ответов, и мне удалось получить код, написанный на основе примера MSDN. Тем не менее, он не работает должным образом. Он распечатывает сообщение ERROR_ACCESS_DENIED, но я не уверен почему, поскольку я работаю как полный администратор. Сначала я пытался создать USER_PRIV_ADMIN, но MSDN сказал, что он может использовать только USER_PRIV_USER, но, к сожалению, ни одна из них не работает. Я надеюсь, что кто-то может заметить ошибку или иметь идею.

Спасибо!

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;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 15 декабря 2015

Ваш код работает!

ScreenShot, Succeed

enter image description here

Я изменил ваш код:

1)

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

2) Я поместил весь ваш код в main(), потому что я помню, что провел несколько тестов, показывающих, что некоторые объекты не могут быть созданы вне main(), я думаю, это причина, почему он не будет работать Я не уверен... Посмотрите, работает ли это и для вас.

3) Я прочитал ссылку на странице NetUserAdd MSDN, там написано, что NetUserAdd не может создать ADMIN, я тоже не знаю почему, но могу процитировать ее для вас. Когда вы вызываете функцию NetUserAdd, этот член должен быть USER_PRIV_USER.

ссылка: https://msdn.microsoft.com/en-us/library/windows/desktop/aa371109(v=vs.85).aspx


0 голосов
/ 16 января 2010

Вы играете в Vista или выигрываете 7 ?, если это так, то вам может потребоваться повысить уровень привилегий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...