我使用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
,它成功了。但是为什么我不能创建管理员用户呢?我有管理员权限。我已经使用Run As进行了纠正,并通过UAC请求权限,我已经将其包括在声明中。
发布于 2015-12-27 21:09:42
useri1.priv
成员是只读的.(我怀疑它的存在只是为了与早期版本的基于DOS的局域网管理器兼容,我认为它确实是通过帐户上的标志而不是组成员来确定管理权限的。)
无论如何,它是只读的这一事实是1。
分配给usri1_name成员的权限级别。当您调用NetUserAdd函数时,这个成员必须是USER_PRIV_USER。调用NetUserSetInfo函数时,该成员必须是NetUserGetInfo函数或NetUserEnum函数返回的值。
创建新管理用户的正确方法是首先创建没有管理权限的用户,然后调用NetLocalGroupAddMembers将用户添加到Administrators组。(或者在域环境中,您可以使用NetGroupAddUser
https://stackoverflow.com/questions/34475203
复制相似问题