gpt4 book ai didi

c++ - NetUserAdd - 权限问题,参数不正确

转载 作者:可可西里 更新时间:2023-11-01 11:49:14 30 4
gpt4 key购买 nike

我正在使用 NetUserAdd添加新管理员。但是我收到了一个我无法弄清楚的错误。

失败方法返回的错误是:

NET_API_STATUS: 87
PARAM_ERR: 5

NET_API_STATUS 的值为 87,即 ERROR_INVALID_PARAMETER。我相信 5 是参数 5。这是我感到困惑的地方。什么参数?我的结构与文档中的结构相同,那么这是哪里失败了?

这是失败的方法。

bool CreateAdminUser(wchar_t *username, wchar_t *password)
{
_USER_INFO_1 ui;
DWORD dwLevel = 1;
DWORD dwError = 0;
NET_API_STATUS = nStatus;

ui.usri1_name = username;
ui.usri1_password = password;
ui.usri1_priv = 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);

if(nStatus != NERR_Success)
{
printf("NET_API_STATUS: %s\nPARAM_ERR: %d\n", nStatus, dwError);
return false;
}

return true;
}

我正在通过运行方式以管理员身份运行可执行文件。

编辑

我将 USER_PRIV_ADMIN 更改为 USER_PRIV_USER 并且它起作用了。但是为什么我无法创建管理员用户?我有管理员权限。我已经使用运行方式,并通过我包含在 list 中的 UAC 请求权限。

最佳答案

useri1.priv 成员是只读的。 (我怀疑它的存在只是为了与旧的基于 DOS 的 LAN 管理器的早期版本兼容,我认为它确实通过帐户上的标志而不是组成员身份确定管理员权限。)

无论如何,它是只读的事实是documented under USER_INFO_1 :

The level of privilege assigned to the usri1_name member. When you call the NetUserAdd function, this member must be USER_PRIV_USER. When you call the NetUserSetInfo function, this member must be the value returned by the NetUserGetInfo function or the NetUserEnum function.

创建新管理用户的正确方法是先创建没有管理员权限的用户,然后调用NetLocalGroupAddMembers将用户添加到管理员组。 (或者在域环境中,您可以改为使用 NetGroupAddUser 将用户添加到 Domain Admins 组,或另一个在您的域中被授予管理员权限的组。)

关于c++ - NetUserAdd - 权限问题,参数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475203/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com