Я пытаюсь добавить локального пользователя в Windows с помощью API управления сетью. У меня нет проблем при работе в Windows 7 (либо на домене или рабочей группе), либо на сервере Windows 2008 R2 в домене. Однако, если я запустил это на сервере Windows 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).
Я экспериментировал с разными размерами паролей, но могу с радостью создать одну и ту же учетную запись с той же информацией, используя инструмент Server Manager, который поставляется с Windows 2008
благодаря
После просмотра кода состояния, а не m_dwLastError, оказалось, что это NERR_PasswordTooShort, поскольку минимальное требование пароля на новом сервере Windows 2008 составляет 8 символов.
m_dwLastError
. Это возвращается вnStatus
.