Функция NetUserAdd (lmaccess.h)
Функция NetUserAdd добавляет учетную запись пользователя и назначает пароль и уровень привилегий.
Синтаксис
NET_API_STATUS NET_API_FUNCTION NetUserAdd(
[in] LPCWSTR servername,
[in] DWORD level,
[in] LPBYTE buf,
[out] LPDWORD parm_err
);
Параметры
[in] servername
Указатель на константную строку, указывающую DNS- или NetBIOS-имя удаленного сервера, на котором выполняется функция. Если этот параметр имеет значение NULL, используется локальный компьютер.
Если определены _WIN32_WINNT или FORCE_UNICODE , это строка Юникода.
[in] level
Указывает уровень информации о данных. Этот параметр может принимать одно из указанных ниже значений.
Значение | Значение |
---|---|
|
Указывает сведения об учетной записи пользователя. Параметр buf указывает на USER_INFO_1 структуру.
При указании этого уровня вызов инициализирует определенные атрибуты значениями по умолчанию. Дополнительные сведения см. в разделе "Примечания". |
|
Указывает сведения уровня 1 и дополнительные атрибуты об учетной записи пользователя. Параметр buf указывает на USER_INFO_2 структуру. |
|
Указывает сведения уровня 2 и дополнительные атрибуты об учетной записи пользователя. Этот уровень действителен только на серверах. Параметр buf указывает на структуру USER_INFO_3 . Обратите внимание, что вместо этого рекомендуется использовать USER_INFO_4 . |
|
Указывает сведения уровня 2 и дополнительные атрибуты об учетной записи пользователя. Этот уровень действителен только на серверах. Параметр buf указывает на структуру USER_INFO_4 .
Windows 2000: Этот уровень не поддерживается. |
[in] buf
Указатель на буфер, указывающий данные. Формат этих данных зависит от значения параметра level . Дополнительные сведения см. в разделе Буферы функций управления сетью.
[out] parm_err
Указатель на значение, которое получает индекс первого элемента информационной структуры пользователя, который вызывает ERROR_INVALID_PARAMETER. Если этот параметр имеет значение NULL, индекс не возвращается при ошибке. Дополнительные сведения см. в статье о функции NetUserSetInfo .
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение будет NERR_Success.
Если функция завершается сбоем, возвращаемое значение может быть одним из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
У пользователя нет доступа к запрошенной информации. |
|
Недопустимое имя компьютера. |
|
Операция разрешена только на основном контроллере домена. |
|
Группа уже существует. |
|
Учетная запись пользователя уже существует. |
|
Пароль короче, чем требуется. (Также возможно, что пароль слишком длинный или слишком новый для своего журнала изменений, не содержит достаточного количества уникальных символов или не соответствует другому требованию политики паролей.) , |
Комментарии
При программировании для Active Directory вы можете вызвать определенные методы интерфейса службы Active Directory (ADSI) для достижения той же функциональности, которую можно достичь, вызвав пользовательские функции управления сетью. Дополнительные сведения см. в разделах IADsUser и IADsComputer.
Если вы вызываете эту функцию на контроллере домена под управлением Active Directory, доступ разрешен или запрещен на основе списка управления доступом (ACL) для защищаемого объекта. ACL по умолчанию разрешает вызывать эту функцию только администраторам домена и операторам учетных записей. На рядовом сервере или рабочей станции эту функцию могут вызывать только администраторы и опытные пользователи. Дополнительные сведения см. в разделе Требования к безопасности для функций управления сетью. Дополнительные сведения о списках управления доступом, ACE и маркерах доступа см. в разделе модель контроль доступа.
Дескриптор безопасности контейнера пользователя используется для выполнения проверка доступа для этой функции. Вызывающий объект должен иметь возможность создавать дочерние объекты класса пользователя.
Пользователи сервера должны использовать систему, в которой сервер создает системную учетную запись для нового пользователя. Создание этой учетной записи управляется несколькими параметрами в файле LanMan.ini сервера.
Если добавленный пользователь уже существует в качестве системного пользователя, usri1_home_dir элемент структуры USER_INFO_1 игнорируется.
При вызове функции NetUserAdd и указан уровень сведений 1, вызов инициализирует дополнительные элементы в USER_INFO_2, USER_INFO_3 и USER_INFO_4 структурах значениями по умолчанию. Вы можете изменить значения по умолчанию, выполнив последующие вызовы функции NetUserSetInfo . Указанные по умолчанию значения перечислены ниже. (Префикс usriX указывает, что элемент может начинаться с нескольких префиксов, например usri2_ или usri4_.)
Член | Значение по умолчанию |
---|---|
usriX_auth_flags | Нет (0) |
usriX_full_name | None (строка NULL) |
usriX_usr_comment | None (строка NULL) |
usriX_parms | None (строка NULL) |
usriX_workstations | All (строка NULL) |
usriX_acct_expires | Никогда (TIMEQ_FOREVER) |
usriX_max_storage | Без ограничений (USER_MAXSTORAGE_UNLIMITED) |
usriX_logon_hours | Вход разрешен в любое время (каждый элемент 0xFF; для всех битов задано значение 1) |
usriX_logon_server | Любой контроллер домена (\\*) |
usriX_country_code | 0 |
usriX_code_page | 0 |
Имена учетных записей пользователей ограничены 20 символами, а имена групп — 256 символами. Кроме того, имена учетных записей не могут быть завершены точкой и не могут содержать запятые или какие-либо из следующих печатных символов: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Имена также не могут содержать символы в диапазоне от 1 до 31, которые не могут быть печатными.
Примеры
В следующем примере кода показано, как добавить учетную запись пользователя и назначить уровень привилегий с помощью вызова функции NetUserAdd . Пример кода заполняет элементы структуры USER_INFO_1 и вызывает NetUserAdd, указывая уровень сведений 1.
#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")
#include <stdio.h>
#include <windows.h>
#include <lm.h>
int wmain(int argc, wchar_t *argv[])
{
USER_INFO_1 ui;
DWORD dwLevel = 1;
DWORD dwError = 0;
NET_API_STATUS nStatus;
if (argc != 3)
{
fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
exit(1);
}
//
// Set up the USER_INFO_1 structure.
// USER_PRIV_USER: name identifies a user,
// rather than an administrator or a guest.
// UF_SCRIPT: required
//
ui.usri1_name = argv[2];
ui.usri1_password = argv[2];
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_flags = UF_SCRIPT;
ui.usri1_script_path = NULL;
//
// Call the NetUserAdd function, specifying level 1.
//
nStatus = NetUserAdd(argv[1],
dwLevel,
(LPBYTE)&ui,
&dwError);
//
// If the call succeeds, inform the user.
//
if (nStatus == NERR_Success)
fwprintf(stderr, L"User %s has been successfully added on %s\n",
argv[2], argv[1]);
//
// Otherwise, print the system error.
//
else
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
return 0;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | lmaccess.h (включая Lm.h) |
Библиотека | Netapi32.lib |
DLL | Netapi32.dll |