我之前发布过有关如何执行此操作的信息,并得到了一些很好的回复,并设法根据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;
}
}
}
答案 0 :(得分:0)
你是os vista还是赢7?如果是,那么你可能需要提高你的特权级别。
答案 1 :(得分:0)
您的代码有效!
我修改了你的代码:
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