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。
如果函数失败,则返回值可能是以下错误代码之一。
返回代码 | 说明 |
---|---|
|
用户无权访问请求的信息。 |
|
用户输入的密码无效。 |
|
计算机名称无效。 |
|
仅允许在域的主域控制器上执行该操作。 |
|
找不到用户名。 |
|
密码短于所需密码。 (The password could also be too long, be too recent in its change history, not have enough unique characters, or not meet another password policy requirement.)(密码过短。(密码也可能过长、在其更改历史记录中过新、未包含足够的独特字符或者未符合另一项密码策略的要求。)) |
注解
如果要对 Active Directory 进行编程,则可以调用某些 Active Directory 服务接口 (ADSI) 方法,以实现通过调用网络管理用户函数可以实现的相同结果。 有关详细信息,请参阅 IADsUser 和 IADsComputer。
如果应用程序在运行 Active Directory 的域控制器上调用 NetUserChangePassword 函数,则会根据 安全对象的访问控制列表 (ACL) 允许或拒绝访问。 默认 ACL 仅允许域管理员和帐户操作员调用此函数。 在成员服务器或工作站上,只有管理员和高级用户可以调用此函数。 用户可以更改自己的密码。 有关详细信息,请参阅 网络管理功能的安全要求。 有关 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 网络重定向程序且远程网络服务器运行 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 |
标头 | lmaccess.h (包括 Lm.h) |
Library | Netapi32.lib |
DLL | Netapi32.dll |