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) メソッドを呼び出して、ネットワーク管理ユーザー関数を呼び出すことで実現できるのと同じ結果を得ることができます。 詳細については、「 IADsUserIADsComputer」を参照してください。

アプリケーションが Active Directory を実行しているドメイン コントローラーで NetUserChangePassword 関数を呼び出す場合、 セキュリティ保護可能なオブジェクトのアクセス制御リスト (ACL) に基づいてアクセスが許可または拒否されます。 既定の ACL では、Domain Admins と Account Operators のみがこの関数を呼び出すように許可されます。 メンバー サーバーまたはワークステーションでは、管理者と Power Users のみがこの関数を呼び出すことができます。 ユーザーは自分のパスワードを変更できます。 詳細については、「 ネットワーク管理機能のセキュリティ要件」を参照してください。 ACL、ACE、およびアクセス トークンの詳細については、「Access Control モデル」を参照してください。

User オブジェクトのセキュリティ記述子は、この関数のアクセスチェックを実行するために使用されます。 さらに、呼び出し元は User オブジェクトに対する "パスワードの変更" 制御アクセス権 を持っている必要があります。 この権限は、既定で匿名ログオンとすべてのユーザーに付与されます。

関数を成功させるには、 oldpassword パラメーターが現在存在するパスワードと一致している必要があることに注意してください。

場合によっては、 NetUserChangePassword 関数を呼び出すプロセスでも、SE_CHANGE_NOTIFY_NAME特権が有効になっている必要があります。それ以外の場合、 NetUserChangePassword は失敗し、 GetLastError は ERROR_ACCESS_DENIEDを返します。 この特権は、 LocalSystem アカウント または管理者グループのメンバーであるアカウントには必要ありません。 既定では、SE_CHANGE_NOTIFY_NAMEはすべてのユーザーに対して有効になっていますが、一部の管理者は全員の特権を無効にすることができます。 アカウント特権の詳細については、「 Privileges and Authorization Constants」を参照してください。

NetUserGetInfo 関数と NetUserSetInfo 関数を使用して、ユーザーが次回ログオン時にログオン パスワードを強制的に変更する方法を示すコード サンプルについては、「ユーザーにログオン パスワードの変更を強制する」を参照してください。

ユーザー アカウント名は 20 文字に制限され、グループ名は 256 文字に制限されます。 さらに、アカウント名をピリオドで終えることはできません。また、コンマまたは印刷可能な文字を含めることはできません: "、/、、[、]、:、|、 <、 >、+、=、;、;、?、*。 また、名前には、印刷できない 1 から 31 の範囲の文字を含めることはできません。

NetUserChangePassword 関数は、ネットワーク経由でリモート サーバーに送信されるときに oldpassword パラメーターと newpassword パラメーターをセキュリティで保護する方法を制御しません。 これらのパラメーターの暗号化は、ネットワーク トランスポートを提供するネットワーク リダイレクターでサポートされているリモート プロシージャ コール (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 (Include Lm.h)
Library Netapi32.lib
[DLL] Netapi32.dll

こちらもご覧ください

NetUserGetInfo

NetUserSetInfo

ネットワーク管理機能

ネットワーク管理の概要

ユーザー関数