NetUserSetInfo 関数 (lmaccess.h)

NetUserSetInfo 関数は、ユーザー アカウントのパラメーターを設定します。

構文

NET_API_STATUS NET_API_FUNCTION NetUserSetInfo(
  [in]  LPCWSTR servername,
  [in]  LPCWSTR username,
  [in]  DWORD   level,
  [in]  LPBYTE  buf,
  [out] LPDWORD parm_err
);

パラメーター

[in] servername

関数を実行するリモート サーバーの DNS または NetBIOS 名を指定する定数文字列へのポインター。 このパラメーターが NULL の場合は、ローカル コンピューターが使用されます。

[in] username

情報を設定するユーザー アカウントの名前を指定する定数文字列へのポインター。 詳細については、「解説」を参照してください。

[in] level

データの情報レベル。 このパラメーターには、次の値のいずれかを指定できます。

意味
0
ユーザー アカウント名を指定します。 buf パラメーターは、USER_INFO_0構造体を指します。 この構造体を使用して、新しいグループ名を指定します。 詳細については、「解説」を参照してください。
1
ユーザー アカウントに関する詳細情報を指定します。 buf パラメーターは、USER_INFO_1構造体を指します。
2
ユーザー アカウントに関するレベル 1 の情報と追加の属性を指定します。 buf パラメーターは、USER_INFO_2構造体を指します。
3
ユーザー アカウントに関するレベル 2 の情報と追加の属性を指定します。 このレベルは、サーバーでのみ有効です。 buf パラメーターは、USER_INFO_3構造体を指します。 代わりに USER_INFO_4 を使用することをお勧めします。
4
ユーザー アカウントに関するレベル 2 の情報と追加の属性を指定します。 このレベルは、サーバーでのみ有効です。 buf パラメーターは、USER_INFO_4構造体を指します。
21
一方向暗号化 LAN Manager 2 を指定します。x 互換パスワード。 buf パラメーターは、USER_INFO_21構造体を指します。
22
ユーザー アカウントに関する詳細情報を指定します。 buf パラメーターは、USER_INFO_22構造体を指します。
1003
ユーザー パスワードを指定します。 buf パラメーターは、USER_INFO_1003構造体を指します。
1005
ユーザー特権レベルを指定します。 buf パラメーターは、USER_INFO_1005構造体を指します。
1006
ユーザーのホーム ディレクトリのパスを指定します。 buf パラメーターは、USER_INFO_1006構造体を指します。
1007
ユーザー アカウントに関連付けるコメントを指定します。 buf パラメーターは、USER_INFO_1007構造体を指します。
1008
ユーザー アカウント属性を指定します。 buf パラメーターは、USER_INFO_1008構造体を指します。
1009
ユーザーのログオン スクリプト ファイルのパスを指定します。 buf パラメーターは、USER_INFO_1009構造体を指します。
1010
ユーザーのオペレーター特権を指定します。 buf パラメーターは、USER_INFO_1010構造体を指します。
1011
ユーザーの完全な名前を指定します。 buf パラメーターは、USER_INFO_1011構造体を指します。
1012
ユーザーに関連付けるコメントを指定します。 buf パラメーターは、USER_INFO_1012構造体を指します。
1014
ユーザーがログオンできるワークステーションの名前を指定します。 buf パラメーターは、USER_INFO_1014構造体を指します。
1017
ユーザー アカウントの有効期限を指定します。 buf パラメーターは、USER_INFO_1017構造体を指します。
1020
ユーザーがログオンできる時間を指定します。 buf パラメーターは、USER_INFO_1020構造体を指します。
1024
ユーザーの国/地域コードを指定します。 buf パラメーターは、USER_INFO_1024構造体を指します。
1051
登録されたユーザーを表すグローバル グループの相対識別子を指定します。 buf パラメーターは、USER_INFO_1051構造体を指します。
1052
ネットワーク ユーザーのプロファイルへのパスを指定します。 buf パラメーターは、USER_INFO_1052構造体を指します。
1053
ユーザーのホーム ディレクトリに割り当てられるドライブ文字を指定します。 buf パラメーターは、USER_INFO_1053構造体を指します。

[in] buf

データを指定するバッファーへのポインター。 このデータの形式は、 level パラメーターの値によって異なります。 詳細については、「 ネットワーク管理関数バッファー」を参照してください。

[out] parm_err

ERROR_INVALID_PARAMETERの原因となるユーザー情報構造体の最初のメンバーのインデックスを受け取る値へのポインター。 このパラメーターが NULL の場合、エラー時にインデックスは返されません。 詳細については、「解説」を参照してください。

戻り値

関数が成功した場合、戻り値はNERR_Success。

関数が失敗した場合、戻り値には次のいずれかのエラー コードを指定できます。

リターン コード 説明
ERROR_ACCESS_DENIED
ユーザーには、要求された情報へのアクセス権がありません。
ERROR_INVALID_PARAMETER
関数パラメーターの 1 つが無効です。 詳細については、「解説」を参照してください。
NERR_InvalidComputer
コンピューター名が無効です。
NERR_NotPrimary
操作は、ドメインのプライマリ ドメイン コントローラーでのみ許可されます。
NERR_SpeGroupOp
操作は、ユーザー グループ、管理者グループ、ローカル グループ、またはゲスト グループである、指定された特殊なグループでは許可されません。
NERR_LastAdmin
操作は、最後の管理アカウントでは許可されません。
NERR_BadPassword
共有名またはパスワードが無効です。
NERR_PasswordTooShort
パスワードが必要以上に短い。 (パスワードが長すぎる、変更履歴が最近使いすぎる、一意の文字が不足している、または別のパスワード ポリシー要件を満たしていない可能性もあります)。
NERR_UserNotFound
ユーザー名が見つかりませんでした。

注釈

Active Directory のプログラミングを行う場合は、特定の Active Directory サービス インターフェイス (ADSI) メソッドを呼び出して、ネットワーク管理ユーザー関数を呼び出すことで実現できるのと同じ機能を実現できる場合があります。 詳細については、「 IADsUserIADsComputer」を参照してください。

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

User オブジェクトのセキュリティ記述子は、この関数のアクセスチェックを実行するために使用されます。

管理特権を持つユーザーまたはアプリケーションのみが NetUserSetInfo 関数を呼び出してユーザーのパスワードを変更できます。 管理者が NetUserSetInfo を呼び出すときに適用される唯一の制限は、新しいパスワードの長さがシステム モーダルと一致している必要があることです。 ユーザーの現在のパスワードを認識しているユーザーまたはアプリケーションは 、NetUserChangePassword 関数を呼び出してパスワードを変更できます。 管理者特権を必要とする関数の呼び出しの詳細については、「 特別な特権を使用した実行」を参照してください。

Administrators ローカル グループのメンバーは、変更可能なユーザー アカウント要素を設定できます。 すべてのユーザーは、自分のアカウントの USER_INFO_2 構造の usri2_country_code メンバー (および USER_INFO_1024 構造の usri1024_country_code メンバー) を設定できます。

アカウント オペレーターのローカル グループのメンバーは、Administrators クラス アカウントの詳細を設定したり、既存のアカウントに管理者特権を付与したり、任意のアカウントのオペレーター特権を変更したりすることはできません。 特権レベルを変更しようとしたり、セキュリティ データベースの管理者特権を持つ最後のアカウント (セキュリティ アカウント マネージャー (SAM) データベース、またはドメイン コントローラーの場合は Active Directory) を無効にしようとすると、 NetUserSetInfo 関数は失敗し、NERR_LastAdminを返します。

次のユーザー アカウント制御フラグを設定するには、次の 特権制御アクセス権 が必要です。

アカウント制御フラグ 特権または権限が必要
UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION SeEnableDelegationPrivilege 特権。既定では管理者に付与されます。
UF_TRUSTED_FOR_DELEGATION SeEnableDelegationPrivilege。
UF_PASSWD_NOTREQD "パスワードを更新する必要はありません" は、認証されたユーザーに既定で付与される Domain オブジェクトのアクセス権を制御します。
UF_DONT_EXPIRE_PASSWD "Unexpire password" は、認証されたユーザーに既定で付与される Domain オブジェクトのアクセス権を制御します。
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED "ユーザーごとに暗号化されたパスワードを有効にする" は、認証されたユーザーに既定で付与される Domain オブジェクトのアクセス権を制御します。
UF_SERVER_TRUST_ACCOUNT "ドメイン内のレプリカの追加と削除" は、既定で管理者に付与される Domain オブジェクトのアクセス権を制御します。
 

特権定数の一覧については、「 承認定数」を参照してください。

アカウントの新しい名前を指定する正しい方法は、USER_INFO_0を使用して NetUserSetInfo を呼び出し、usri0_name メンバーを使用して新しい値を指定することです。 他の情報レベルで NetUserSetInfo を 呼び出し、 usriX_name メンバーを使用して値を指定した場合、値は無視されます。

NetUserSetInfo の呼び出しは、ネットワーク サーバーによって作成されるユーザー アカウントのホーム ディレクトリのみを変更できることに注意してください。

NetUserSetInfo 関数がERROR_INVALID_PARAMETERを返す場合は、parm_err パラメーターを使用して、無効なユーザー情報構造体の最初のメンバーを示すことができます。 (ユーザー情報構造体は USER_INFO_ で始まり、その形式は level パラメーターで指定されます)。次の表に、 parm_err パラメーターで返すことができる値と、エラーが発生している対応する構造体メンバーを示します。 (プレフィックス usri*_ は、メンバーが複数のプレフィックス (usri10_やusri1003_など) で始めることができることを示します。

メンバー
USER_NAME_PARMNUM usri*_name
USER_PASSWORD_PARMNUM usri*_password
USER_PASSWORD_AGE_PARMNUM usri*_password_age
USER_PRIV_PARMNUM usri*_priv
USER_HOME_DIR_PARMNUM usri*_home_dir
USER_COMMENT_PARMNUM usri*_comment
USER_FLAGS_PARMNUM usri*_flags
USER_SCRIPT_PATH_PARMNUM usri*_script_path
USER_AUTH_FLAGS_PARMNUM usri*_auth_flags
USER_FULL_NAME_PARMNUM usri*_full_name
USER_USR_COMMENT_PARMNUM usri*_usr_comment
USER_PARMS_PARMNUM usri*_parms
USER_WORKSTATIONS_PARMNUM usri*_workstations
USER_LAST_LOGON_PARMNUM usri*_last_logon
USER_LAST_LOGOFF_PARMNUM usri*_last_logoff
USER_ACCT_EXPIRES_PARMNUM usri*_acct_expires
USER_MAX_STORAGE_PARMNUM usri*_max_storage
USER_UNITS_PER_WEEK_PARMNUM usri*_units_per_week
USER_LOGON_HOURS_PARMNUM usri*_logon_hours
USER_PAD_PW_COUNT_PARMNUM usri*_bad_pw_count
USER_NUM_LOGONS_PARMNUM usri*_num_logons
USER_LOGON_SERVER_PARMNUM usri*_logon_server
USER_COUNTRY_CODE_PARMNUM usri*_country_code
USER_CODE_PAGE_PARMNUM usri*_code_page
USER_PRIMARY_GROUP_PARMNUM usri*_primary_group_id
USER_PROFILE_PARMNUM usri*_profile
USER_HOME_DIR_DRIVE_PARMNUM usri*_home_dir_drive
 

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

NetUserSetInfo 関数は、ネットワーク経由でリモート サーバーに送信してユーザー パスワードを変更するときにパスワード パラメーターをセキュリティで保護する方法を制御しません。 これらのパラメーターの暗号化は、ネットワーク トランスポートを提供するネットワーク リダイレクターでサポートされているリモート プロシージャ コール (RPC) メカニズムによって処理されます。 暗号化は、ローカル コンピューターでサポートされるセキュリティ メカニズムと、 servername パラメーターで指定されたリモート ネットワーク サーバーでサポートされるセキュリティ メカニズムによっても制御されます。 Microsoft ネットワーク リダイレクターを使用し、リモート ネットワーク サーバーが Microsoft Windows を実行している場合のセキュリティの詳細については、 MS-RPCEMS-SAMR のプロトコル に関するドキュメントを参照してください。

次のコード サンプルは、 NetUserSetInfo 関数を呼び出してユーザー アカウントを無効にする方法を示しています。 このコード サンプルでは、USER_INFO_1008 構造体のusri1008_flags メンバーを入力し、UF_ACCOUNTDISABLE値を指定します。 次に、情報レベル 0 を指定して NetUserSetInfo を呼び出します。

#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 dwLevel = 1008;
   USER_INFO_1008 ui;
   NET_API_STATUS nStatus;

   if (argc != 3)
   {
      fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
      exit(1);
   }
   // Fill in the USER_INFO_1008 structure member.
   // UF_SCRIPT: required.
   //
   ui.usri1008_flags = UF_SCRIPT | UF_ACCOUNTDISABLE;
   //
   // Call the NetUserSetInfo function 
   //  to disable the account, specifying level 1008.
   //
   nStatus = NetUserSetInfo(argv[1],
                            argv[2],
                            dwLevel,
                            (LPBYTE)&ui,
                            NULL);
   //
   // Display the result of the call.
   //
   if (nStatus == NERR_Success)
      fwprintf(stderr, L"User account %s has been disabled\n", argv[2]);
   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

ネットワーク管理機能

ネットワーク管理の概要

USER_INFO_0

USER_INFO_1

USER_INFO_1003

USER_INFO_1005

USER_INFO_1006

USER_INFO_1007

USER_INFO_1008

USER_INFO_1009

USER_INFO_1010

USER_INFO_1011

USER_INFO_1012

USER_INFO_1013

USER_INFO_1014

USER_INFO_1017

USER_INFO_1020

USER_INFO_1024

USER_INFO_1051

USER_INFO_1052

USER_INFO_1053

USER_INFO_2

USER_INFO_21

USER_INFO_22

USER_INFO_4

ユーザー関数