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


Функция NetUserChangePassword (lmaccess.h)

Функция NetUserChangePassword изменяет пароль пользователя для указанного сетевого сервера или домена.

Синтаксис

NET_API_STATUS NET_API_FUNCTION NetUserChangePassword(
  [in] LPCWSTR domainname,
  [in] LPCWSTR username,
  [in] LPCWSTR oldpassword,
  [in] LPCWSTR newpassword
);

Параметры

[in] domainname

Указатель на константную строку, указывающую DNS- или NetBIOS-имя удаленного сервера или домена, на котором выполняется функция. Если этот параметр имеет значение NULL, используется домен входа вызывающего объекта.

[in] username

Указатель на константную строку, указывающую имя пользователя. Функция NetUserChangePassword изменяет пароль для указанного пользователя.

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

[in] oldpassword

Указатель на константную строку, указывающую старый пароль пользователя.

[in] newpassword

Указатель на константную строку, указывающую новый пароль пользователя.

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

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

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

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

Комментарии

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

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

Дескриптор безопасности объекта User используется для выполнения проверка доступа для этой функции. Кроме того, вызывающий объект должен иметь право управления " Изменить пароль" для объекта User. По умолчанию это право предоставляется анонимным входом и всем пользователям.

Обратите внимание, что для успешного выполнения функции параметр oldpassword должен совпадать с текущим паролем.

В некоторых случаях для процесса, который вызывает функцию NetUserChangePassword , также должна быть включена привилегия SE_CHANGE_NOTIFY_NAME; В противном случае netUserChangePassword завершается сбоем, и GetLastError возвращает ERROR_ACCESS_DENIED. Эта привилегия не требуется для учетной записи LocalSystem или для учетных записей, входящих в группу администраторов. По умолчанию SE_CHANGE_NOTIFY_NAME включена для всех пользователей, но некоторые администраторы могут отключить привилегии для всех. Дополнительные сведения о привилегиях учетной записи см. в разделе Привилегии и константы авторизации.

Пример кода, демонстрирующий принудительное изменение пароля для входа в систему при следующем входе в систему с помощью функций NetUserGetInfo и NetUserSetInfo, см. в статье Принудительное изменение пароля для входа пользователя.

Имена учетных записей пользователей могут содержать не более 20 символов, а имена групп — не более 256 символов. Кроме того, имена учетных записей не могут быть завершены точкой и не могут содержать запятые или любые из следующих печатных символов: ", /, , [, ], :, |, <, >, +, =, ;, ?, *. Имена также не могут содержать непечатаемые символы в диапазоне от 1 до 31.

Функция NetUserChangePassword не управляет защитой параметров oldpassword и newpassword при отправке по сети на удаленный сервер. Любое шифрование этих параметров обрабатывается механизмом удаленного вызова процедур (RPC), поддерживаемым сетевым перенаправителем, предоставляющим сетевой транспорт. Шифрование также контролируется механизмами безопасности, поддерживаемыми локальным компьютером, и механизмами безопасности, поддерживаемыми удаленным сетевым сервером или доменом, указанным в параметре domainname . Дополнительные сведения о безопасности при использовании перенаправителя сети Майкрософт и удаленном сетевом сервере под управлением Microsoft Windows см. в документации по протоколам для MS-RPCE, MS-SAMR, MS-SPNG и MS-NLMP.

Примеры

В следующем примере кода показано, как изменить пароль пользователя с помощью вызова функции NetUserChangePassword . Все параметры функции являются обязательными.

#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 dwError = 0;
   NET_API_STATUS nStatus;
   //
   // All parameters are required.
   //
   if (argc != 5)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName OldPassword NewPassword\n", argv[0]);
      exit(1);
   }
   //
   // Call the NetUserChangePassword function.
   //
   nStatus = NetUserChangePassword(argv[1], argv[2], argv[3], argv[4]);
   //
   // If the call succeeds, inform the user.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User password has been changed successfully\n");
   //
   // 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

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

NetUserGetInfo

NetUserSetInfo

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

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

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