在工作组Windows Server 2008 R2上运行时,NetUserAdd失败

时间:2014-02-27 18:33:44

标签: c++ windows winapi windows-server-2008

我正在尝试使用网络管理API将本地用户添加到Windows。在域上运行Windows 7(域或工作组)或Windows 2008 R2服务器时,我没有遇到任何问题。但是,如果我在不在域上的Windows Server 2008 R2上运行此操作,则会出现错误。问题是返回的错误代码是-1而不是文档中给定的错误之一

bool CLocalUsers::AddUser(LPCTSTR lpszUserName, LPCTSTR lpszPassword)
{
    // Clear error code
    m_dwLastError = 0;

    USER_INFO_1 ui;
    ui.usri1_name = (LPTSTR)(LPCTSTR)lpszUserName;
    ui.usri1_priv = USER_PRIV_USER;
    ui.usri1_home_dir = NULL;
    ui.usri1_comment = NULL;
    ui.usri1_flags = UF_SCRIPT | UF_DONT_EXPIRE_PASSWD;
    ui.usri1_script_path = NULL;

    // Point to a zero character password if null
    if(lpszPassword == NULL)
    {
        lpszPassword = _T("");
        ui.usri1_flags |= UF_PASSWD_NOTREQD;
    }
    ui.usri1_password = (LPTSTR)(LPCTSTR)lpszPassword;

    // Add the user
    NET_API_STATUS nStatus = ::NetUserAdd(NULL, 1, (LPBYTE)&ui, &m_dwLastError);
    if(nStatus != NERR_Success)
    {
        // DEBUG ONLY
        CString szErrorMsg;
        szErrorMsg.Format(_T("Error code %d"), m_dwLastError);
        ::AfxMessageBox(szErrorMsg, MB_OK);
        // DEBUG ONLY
        return false;
    }
    return true;
}

它在管理员权限下运行。我可以在没有任何问题的情况下调用其他网络功能(NetUserGetInfo,NetLocalGroupAddMembers)。

我已尝试使用不同的密码大小,但我可以使用Windows 2008附带的服务器管理器工具以相同的信息创建相同的帐户

由于

1 个答案:

答案 0 :(得分:1)

在查看状态代码而不是m_dwLastError后,结果是NERR_PasswordTooShort,因为新的Windows 2008服务器上的最低密码要求是8个字符。