Сбой NetUserAdd при запуске в рабочей группе Windows Server 2008 R2

0

Я пытаюсь добавить локального пользователя в 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

благодаря

  • 0
    Код ошибки не возвращается в m_dwLastError . Это возвращается в nStatus .
  • 0
    Я чувствую себя так глупо сейчас .... LOL! Я бы неправильно прочитал документацию. Оказывается, это был NERR_PasswordTooShort, поскольку минимальное требование к паролю на новом сервере Windows 2008 составляет 8 символов. Все работает сейчас. Большое спасибо.
Теги:
winapi
windows-server-2008

1 ответ

1

После просмотра кода состояния, а не m_dwLastError, оказалось, что это NERR_PasswordTooShort, поскольку минимальное требование пароля на новом сервере Windows 2008 составляет 8 символов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню