Функция NetUserSetInfo (lmaccess.h)
Функция NetUserSetInfo задает параметры учетной записи пользователя.
Синтаксис
NET_API_STATUS NET_API_FUNCTION NetUserSetInfo(
[in] LPCWSTR servername,
[in] LPCWSTR username,
[in] DWORD level,
[in] LPBYTE buf,
[out] LPDWORD parm_err
);
Параметры
[in] servername
Указатель на константную строку, указывающую DNS или NetBIOS-имя удаленного сервера, на котором выполняется функция. Если этот параметр имеет значение NULL, используется локальный компьютер.
[in] username
Указатель на константную строку, указывающую имя учетной записи пользователя, для которой нужно задать сведения. Дополнительные сведения см. в разделе "Примечания".
[in] level
Уровень информации данных. Этот параметр может принимать одно из указанных ниже значений.
Значение | Значение |
---|---|
|
Указывает имя учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_0 . Используйте эту структуру для указания нового имени группы. Дополнительные сведения см. в разделе "Примечания". |
|
Указывает подробные сведения об учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_1 . |
|
Указывает сведения уровня 1 и дополнительные атрибуты учетной записи пользователя. Параметр buf указывает на USER_INFO_2 структуру. |
|
Указывает сведения о двух уровнях и дополнительные атрибуты учетной записи пользователя. Этот уровень действителен только на серверах. Параметр buf указывает на структуру USER_INFO_3 . Обратите внимание, что вместо этого рекомендуется использовать USER_INFO_4 . |
|
Указывает сведения о двух уровнях и дополнительные атрибуты учетной записи пользователя. Этот уровень действителен только на серверах. Параметр buf указывает на структуру USER_INFO_4 . |
|
Задает односторонняя зашифрованная локальная сеть 2. Пароль, совместимый с x. Параметр buf указывает на структуру USER_INFO_21 . |
|
Указывает подробные сведения об учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_22 . |
|
Задает пароль пользователя. Параметр buf указывает на USER_INFO_1003 структуру. |
|
Задает уровень привилегий пользователя. Параметр buf указывает на USER_INFO_1005 структуру. |
|
Указывает путь к домашнему каталогу для пользователя. Параметр buf указывает на USER_INFO_1006 структуру. |
|
Указывает комментарий, который необходимо связать с учетной записью пользователя. Параметр buf указывает на структуру USER_INFO_1007 . |
|
Задает атрибуты учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_1008 . |
|
Указывает путь к файлу скрипта входа пользователя. Параметр buf указывает на структуру USER_INFO_1009 . |
|
Указывает привилегии оператора пользователя. Параметр buf указывает на USER_INFO_1010 структуру. |
|
Указывает полное имя пользователя. Параметр buf указывает на USER_INFO_1011 структуру. |
|
Указывает комментарий, который необходимо связать с пользователем. Параметр buf указывает на структуру USER_INFO_1012 . |
|
Указывает имена рабочих станций, с которых пользователь может войти в систему. Параметр buf указывает на структуру USER_INFO_1014 . |
|
Указывает, когда истекает срок действия учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_1017 . |
|
Указывает время, в течение которого пользователь может войти в систему. Параметр buf указывает на структуру USER_INFO_1020 . |
|
Указывает код страны или региона пользователя. Параметр buf указывает на структуру USER_INFO_1024 . |
|
Указывает относительный идентификатор глобальной группы, представляющей зарегистрированного пользователя. Параметр buf указывает на USER_INFO_1051 структуру. |
|
Указывает путь к профилю сетевого пользователя. Параметр buf указывает на структуру USER_INFO_1052 . |
|
Указывает букву диска, назначенную домашнему каталогу пользователя. Параметр buf указывает на структуру USER_INFO_1053 . |
[in] buf
Указатель на буфер, указывающий данные. Формат этих данных зависит от значения параметра level . Дополнительные сведения см. в разделе Буферы функций управления сетью.
[out] parm_err
Указатель на значение, которое получает индекс первого члена пользовательской информационной структуры, вызывающей ERROR_INVALID_PARAMETER. Если этот параметр имеет значение NULL, индекс не возвращается при ошибке. Дополнительные сведения см. в разделе "Примечания".
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение будет NERR_Success.
Если функция завершается ошибкой, возвращаемое значение может быть одним из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
У пользователя нет доступа к запрошенной информации. |
|
Один из параметров функции недопустим. Дополнительные сведения см. в разделе "Примечания". |
|
Недопустимое имя компьютера. |
|
Операция разрешена только на основном контроллере домена. |
|
Операция не разрешена для указанных специальных групп, которые являются группами пользователей, группами администраторов, локальными группами или гостевыми группами. |
|
Операция не разрешена для последней учетной записи администратора. |
|
Недопустимое имя общего ресурса или пароль. |
|
Пароль короче, чем требуется. (Также возможно, что пароль слишком длинный или слишком новый для своего журнала изменений, не содержит достаточного количества уникальных символов или не соответствует другому требованию политики паролей.) , |
|
Не удалось найти имя пользователя. |
Комментарии
При программировании для Active Directory вы можете вызвать определенные методы интерфейса службы Active Directory (ADSI) для достижения той же функциональности, которую можно достичь, вызвав пользовательские функции управления сетью. Дополнительные сведения см. в разделах IADsUser и IADsComputer.
Если вы вызываете эту функцию на контроллере домена под управлением Active Directory, доступ разрешен или запрещен на основе списка управления доступом (ACL) для защищаемого объекта. ACL по умолчанию разрешает вызывать эту функцию только администраторам домена и операторам учетных записей. На рядовом сервере или рабочей станции эту функцию могут вызывать только администраторы и опытные пользователи. Дополнительные сведения см. в разделе Требования к безопасности для функций управления сетью. Дополнительные сведения о списках управления доступом, ACE и маркерах доступа см. в разделе модель контроль доступа.
Дескриптор безопасности объекта User используется для выполнения проверка доступа для этой функции.
Только пользователи или приложения с правами администратора могут вызывать функцию NetUserSetInfo для изменения пароля пользователя. Когда администратор вызывает NetUserSetInfo, применяется единственное ограничение: новая длина пароля должна быть согласована с модалами системы. Пользователь или приложение, знающее текущий пароль пользователя, может вызвать функцию NetUserChangePassword , чтобы изменить пароль. Дополнительные сведения о вызове функций, которым требуются права администратора, см. в разделе Запуск с особыми привилегиями.
Члены локальной группы Администраторы могут задавать любые изменяемые элементы учетной записи пользователя. Все пользователи могут задать usri2_country_code участника структуры USER_INFO_2 (и usri1024_country_code участника структуры USER_INFO_1024 ) для своих учетных записей.
Член локальной группы оператора учетной записи не может задать сведения для учетной записи класса "Администраторы", предоставить существующую учетную запись права администратора или изменить привилегию оператора для любой учетной записи. При попытке изменить уровень привилегий или отключить последнюю учетную запись с правами администратора в базе данных безопасности (база данных диспетчера учетных записей безопасности (SAM) или, в случае контроллеров домена, Active Directory), функция NetUserSetInfo завершается сбоем и возвращает NERR_LastAdmin.
Чтобы задать следующие флаги контроля учетных записей пользователей, требуются следующие привилегии и права доступа.
Флаг контроля учетных записей | Требуются привилегии или права |
---|---|
UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION | Привилегия SeEnableDelegationPrivilege, которая по умолчанию предоставляется администраторам. |
UF_TRUSTED_FOR_DELEGATION | SeEnableDelegationPrivilege. |
UF_PASSWD_NOTREQD | Управление доступом "Обновление пароля не требуется" в объекте Domain, который по умолчанию предоставляется пользователям, прошедшим проверку подлинности. |
UF_DONT_EXPIRE_PASSWD | "Отменить срок действия пароля" управляет доступом прямо к объекту Domain, который по умолчанию предоставляется пользователям, прошедшим проверку подлинности. |
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED | "Включить пароль с обратимым шифрованием для каждого пользователя" управление доступом к объекту Domain, который по умолчанию предоставляется пользователям, прошедшим проверку подлинности. |
UF_SERVER_TRUST_ACCOUNT | Право управления "Добавление и удаление реплика в домене" к объекту Domain, которое по умолчанию предоставляется администраторам. |
Список констант привилегий см. в разделе Константы авторизации.
Правильный способ указать новое имя учетной записи — вызвать NetUserSetInfo с USER_INFO_0 и указать новое значение с помощью элемента usri0_name . Если вы вызываете NetUserSetInfo с другими уровнями информации и указываете значение с помощью элемента usriX_name , значение игнорируется.
Обратите внимание, что вызовы NetUserSetInfo могут изменять домашний каталог только для учетных записей пользователей, создаваемых сетевым сервером.
Если функция NetUserSetInfo возвращает ERROR_INVALID_PARAMETER, можно использовать параметр parm_err , чтобы указать, что первый недопустимый элемент пользовательской информационной структуры. (Структура сведений о пользователе начинается с USER_INFO_ и ее формат задается параметром уровня .) В следующей таблице перечислены значения, которые могут быть возвращены в параметре parm_err , и соответствующий элемент структуры, который находится в ошибке. (Префикс usri*_ указывает, что элемент может начинаться с нескольких префиксов, например usri10_ или usri1003_.)
Значение | Член |
---|---|
USER_NAME_PARMNUM | usri*_name |
USER_PASSWORD_PARMNUM | usri*_password |
USER_PASSWORD_AGE_PARMNUM | usri*_password_age |
USER_PRIV_PARMNUM | usri*_priv |
USER_HOME_DIR_PARMNUM | usri*_home_dir |
USER_COMMENT_PARMNUM | usri*_comment |
USER_FLAGS_PARMNUM | usri*_flags |
USER_SCRIPT_PATH_PARMNUM | usri*_script_path |
USER_AUTH_FLAGS_PARMNUM | usri*_auth_flags |
USER_FULL_NAME_PARMNUM | usri*_full_name |
USER_USR_COMMENT_PARMNUM | usri*_usr_comment |
USER_PARMS_PARMNUM | usri*_parms |
USER_WORKSTATIONS_PARMNUM | usri*_workstations |
USER_LAST_LOGON_PARMNUM | usri*_last_logon |
USER_LAST_LOGOFF_PARMNUM | usri*_last_logoff |
USER_ACCT_EXPIRES_PARMNUM | usri*_acct_expires |
USER_MAX_STORAGE_PARMNUM | usri*_max_storage |
USER_UNITS_PER_WEEK_PARMNUM | usri*_units_per_week |
USER_LOGON_HOURS_PARMNUM | usri*_logon_hours |
USER_PAD_PW_COUNT_PARMNUM | usri*_bad_pw_count |
USER_NUM_LOGONS_PARMNUM | usri*_num_logons |
USER_LOGON_SERVER_PARMNUM | usri*_logon_server |
USER_COUNTRY_CODE_PARMNUM | usri*_country_code |
USER_CODE_PAGE_PARMNUM | usri*_code_page |
USER_PRIMARY_GROUP_PARMNUM | usri*_primary_group_id |
USER_PROFILE_PARMNUM | usri*_profile |
USER_HOME_DIR_DRIVE_PARMNUM | usri*_home_dir_drive |
Имена учетных записей пользователей могут содержать не более 20 символов, а имена групп — не более 256 символов. Кроме того, имена учетных записей не могут быть завершены точкой и не могут содержать запятые или любые из следующих печатных символов: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Имена также не могут содержать непечатаемые символы в диапазоне от 1 до 31.
Функция NetUserSetInfo не управляет защитой параметров пароля при отправке по сети на удаленный сервер для изменения пароля пользователя. Любое шифрование этих параметров обрабатывается механизмом удаленного вызова процедур (RPC), поддерживаемым сетевым перенаправителем, предоставляющим сетевой транспорт. Шифрование также контролируется механизмами безопасности, поддерживаемыми локальным компьютером, и механизмами безопасности, поддерживаемыми удаленным сетевым сервером, указанным в параметре servername . Дополнительные сведения о безопасности при использовании перенаправителя сети Майкрософт и удаленном сетевом сервере под управлением Microsoft Windows см. в документации по протоколам ДЛЯ MS-RPCE и MS-SAMR.
Примеры
В следующем примере кода показано, как отключить учетную запись пользователя с помощью вызова функции NetUserSetInfo . Пример кода заполняет элемент usri1008_flags структуры USER_INFO_1008 , указывая значение UF_ACCOUNTDISABLE. Затем пример вызывает NetUserSetInfo, указывая уровень сведений 0.
#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[])
{
DWORD dwLevel = 1008;
USER_INFO_1008 ui;
NET_API_STATUS nStatus;
if (argc != 3)
{
fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
exit(1);
}
// Fill in the USER_INFO_1008 structure member.
// UF_SCRIPT: required.
//
ui.usri1008_flags = UF_SCRIPT | UF_ACCOUNTDISABLE;
//
// Call the NetUserSetInfo function
// to disable the account, specifying level 1008.
//
nStatus = NetUserSetInfo(argv[1],
argv[2],
dwLevel,
(LPBYTE)&ui,
NULL);
//
// Display the result of the call.
//
if (nStatus == NERR_Success)
fwprintf(stderr, L"User account %s has been disabled\n", argv[2]);
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 |