C ++ NetUserAdd()无法正常工作?

时间:2010-01-16 06:48:51

标签: c++ winapi

我之前发布过有关如何执行此操作的信息,并得到了一些很好的回复,并设法根据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 :(得分:0)

你是os vista还是赢7?如果是,那么你可能需要提高你的特权级别。

答案 1 :(得分:0)

您的代码有效!

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

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