2014-02-27 132 views
0

我試圖使用網絡管理API將本地用戶添加到Windows。在Windows 7上運行(在域或工作組上)或Windows 2008 R2服務器在域上運行時,我沒有問題。但是,如果我在不在域中的Windows Server 2008 R2上運行此操作,則會出現錯誤。問題是返回的錯誤代碼是-1而不是文檔中給定的錯誤之一在工作組上運行Windows Server 2008 R2時NetUserAdd失敗

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

感謝

+0

錯誤代碼不會在'm_dwLastError'中返回。它以'nStatus'返回。 –

+0

我現在覺得很蠢....哈哈!我會誤讀文檔。事實證明,這是NERR_PasswordTooShort,因爲新的Windows 2008服務器上的最低密碼要求是8個字符。現在都在工作。非常感謝你。 – Richard

回答

1

在狀態代碼看起來有點後比m_dwLastError事實證明它是NERR_PasswordTooShort,因爲新的Windows 2008服務器上的最低密碼要求是8個字符。

相關問題