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
密码短于所需密码。 (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) 方法,以实现通过调用网络管理用户函数可以实现的相同结果。 有关详细信息,请参阅 IADsUserIADsComputer

如果应用程序在运行 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 函数不控制在通过网络发送到远程服务器时如何保护 oldpasswordnewpassword 参数。 这些参数的任何加密都由远程过程调用 (RPC) 机制处理,该机制由提供网络传输的网络重定向程序支持。 加密还受本地计算机支持的安全机制以及远程网络服务器或 domainname 参数中指定的域支持的安全机制控制。 有关使用 Microsoft 网络重定向程序且远程网络服务器运行 Microsoft Windows 时的安全性的更多详细信息,请参阅 MS-RPCEMS-SAMRMS-SPNGMS-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

另请参阅

NetUserGetInfo

NetUserSetInfo

网络管理功能

网络管理概述

用户函数