Поделиться через


Функция 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

Уровень информации данных. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
0
Указывает имя учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_0 . Используйте эту структуру для указания нового имени группы. Дополнительные сведения см. в разделе "Примечания".
1
Указывает подробные сведения об учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_1 .
2
Указывает сведения уровня 1 и дополнительные атрибуты учетной записи пользователя. Параметр buf указывает на USER_INFO_2 структуру.
3
Указывает сведения о двух уровнях и дополнительные атрибуты учетной записи пользователя. Этот уровень действителен только на серверах. Параметр buf указывает на структуру USER_INFO_3 . Обратите внимание, что вместо этого рекомендуется использовать USER_INFO_4 .
4
Указывает сведения о двух уровнях и дополнительные атрибуты учетной записи пользователя. Этот уровень действителен только на серверах. Параметр buf указывает на структуру USER_INFO_4 .
21
Задает односторонняя зашифрованная локальная сеть 2. Пароль, совместимый с x. Параметр buf указывает на структуру USER_INFO_21 .
22
Указывает подробные сведения об учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_22 .
1003
Задает пароль пользователя. Параметр buf указывает на USER_INFO_1003 структуру.
1005
Задает уровень привилегий пользователя. Параметр buf указывает на USER_INFO_1005 структуру.
1006
Указывает путь к домашнему каталогу для пользователя. Параметр buf указывает на USER_INFO_1006 структуру.
1007
Указывает комментарий, который необходимо связать с учетной записью пользователя. Параметр buf указывает на структуру USER_INFO_1007 .
1008
Задает атрибуты учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_1008 .
1009
Указывает путь к файлу скрипта входа пользователя. Параметр buf указывает на структуру USER_INFO_1009 .
1010
Указывает привилегии оператора пользователя. Параметр buf указывает на USER_INFO_1010 структуру.
1011
Указывает полное имя пользователя. Параметр buf указывает на USER_INFO_1011 структуру.
1012
Указывает комментарий, который необходимо связать с пользователем. Параметр buf указывает на структуру USER_INFO_1012 .
1014
Указывает имена рабочих станций, с которых пользователь может войти в систему. Параметр buf указывает на структуру USER_INFO_1014 .
1017
Указывает, когда истекает срок действия учетной записи пользователя. Параметр buf указывает на структуру USER_INFO_1017 .
1020
Указывает время, в течение которого пользователь может войти в систему. Параметр buf указывает на структуру USER_INFO_1020 .
1024
Указывает код страны или региона пользователя. Параметр buf указывает на структуру USER_INFO_1024 .
1051
Указывает относительный идентификатор глобальной группы, представляющей зарегистрированного пользователя. Параметр buf указывает на USER_INFO_1051 структуру.
1052
Указывает путь к профилю сетевого пользователя. Параметр buf указывает на структуру USER_INFO_1052 .
1053
Указывает букву диска, назначенную домашнему каталогу пользователя. Параметр buf указывает на структуру USER_INFO_1053 .

[in] buf

Указатель на буфер, указывающий данные. Формат этих данных зависит от значения параметра level . Дополнительные сведения см. в разделе Буферы функций управления сетью.

[out] parm_err

Указатель на значение, которое получает индекс первого члена пользовательской информационной структуры, вызывающей ERROR_INVALID_PARAMETER. Если этот параметр имеет значение NULL, индекс не возвращается при ошибке. Дополнительные сведения см. в разделе "Примечания".

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение будет NERR_Success.

Если функция завершается ошибкой, возвращаемое значение может быть одним из следующих кодов ошибок.

Код возврата Описание
ERROR_ACCESS_DENIED
У пользователя нет доступа к запрошенной информации.
ERROR_INVALID_PARAMETER
Один из параметров функции недопустим. Дополнительные сведения см. в разделе "Примечания".
NERR_InvalidComputer
Недопустимое имя компьютера.
NERR_NotPrimary
Операция разрешена только на основном контроллере домена.
NERR_SpeGroupOp
Операция не разрешена для указанных специальных групп, которые являются группами пользователей, группами администраторов, локальными группами или гостевыми группами.
NERR_LastAdmin
Операция не разрешена для последней учетной записи администратора.
NERR_BadPassword
Недопустимое имя общего ресурса или пароль.
NERR_PasswordTooShort
Пароль короче, чем требуется. (Также возможно, что пароль слишком длинный или слишком новый для своего журнала изменений, не содержит достаточного количества уникальных символов или не соответствует другому требованию политики паролей.) ,
NERR_UserNotFound
Не удалось найти имя пользователя.

Комментарии

При программировании для Active Directory вы можете вызвать определенные методы интерфейса службы Active Directory (ADSI) для достижения той же функциональности, которую можно достичь, вызвав пользовательские функции управления сетью. Дополнительные сведения см. в разделах IADsUser и IADsComputer.

Если вы вызываете эту функцию на контроллере домена под управлением Active Directory, доступ разрешен или запрещен на основе списка управления доступом (ACL) для защищаемого объекта. ACL по умолчанию разрешает вызывать эту функцию только администраторам домена и операторам учетных записей. На рядовом сервере или рабочей станции эту функцию могут вызывать только администраторы и опытные пользователи. Дополнительные сведения см. в разделе Требования к безопасности для функций управления сетью. Дополнительные сведения о списках управления доступом, ACE и маркерах доступа см. в разделе модель контроль доступа.

Дескриптор безопасности объекта User используется для выполнения проверка доступа для этой функции.

Только пользователи или приложения с правами администратора могут вызывать функцию NetUserSetInfo для изменения пароля пользователя. Когда администратор вызывает NetUserSetInfo, применяется единственное ограничение: новая длина пароля должна быть согласована с модалами системы. Пользователь или приложение, знающее текущий пароль пользователя, может вызвать функцию NetUserChangePassword , чтобы изменить пароль. Дополнительные сведения о вызове функций, которым требуются права администратора, см. в разделе Запуск с особыми привилегиями.

Члены локальной группы Администраторы могут задавать любые изменяемые элементы учетной записи пользователя. Все пользователи могут задать usri2_country_code участника структуры USER_INFO_2usri1024_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

См. также раздел

NetUserGetInfo

Функции управления сетью

Общие сведения об управлении сетью

USER_INFO_0

USER_INFO_1

USER_INFO_1003

USER_INFO_1005

USER_INFO_1006

USER_INFO_1007

USER_INFO_1008

USER_INFO_1009

USER_INFO_1010

USER_INFO_1011

USER_INFO_1012

USER_INFO_1013

USER_INFO_1014

USER_INFO_1017

USER_INFO_1020

USER_INFO_1024

USER_INFO_1051

USER_INFO_1052

USER_INFO_1053

USER_INFO_2

USER_INFO_21

USER_INFO_22

USER_INFO_4

Пользовательские функции