Функция 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.
Если функция завершается ошибкой, возвращаемое значение может быть одним из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Пользователь не имеет доступа к запрошенной информации. |
|
Пользователь ввел недопустимый пароль. |
|
Недопустимое имя компьютера. |
|
Операция разрешена только на основном контроллере домена. |
|
Не удалось найти имя пользователя. |
|
Пароль короче, чем требуется. (Также возможно, что пароль слишком длинный или слишком новый для своего журнала изменений, не содержит достаточного количества уникальных символов или не соответствует другому требованию политики паролей.) , |
Комментарии
При программировании для 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 |