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
データの情報レベル。 このパラメーターには、次の値のいずれかを指定できます。
値 | 意味 |
---|---|
|
ユーザー アカウント名を指定します。 buf パラメーターは、USER_INFO_0構造体を指します。 この構造体を使用して、新しいグループ名を指定します。 詳細については、「解説」を参照してください。 |
|
ユーザー アカウントに関する詳細情報を指定します。 buf パラメーターは、USER_INFO_1構造体を指します。 |
|
ユーザー アカウントに関するレベル 1 の情報と追加の属性を指定します。 buf パラメーターは、USER_INFO_2構造体を指します。 |
|
ユーザー アカウントに関するレベル 2 の情報と追加の属性を指定します。 このレベルは、サーバーでのみ有効です。 buf パラメーターは、USER_INFO_3構造体を指します。 代わりに USER_INFO_4 を使用することをお勧めします。 |
|
ユーザー アカウントに関するレベル 2 の情報と追加の属性を指定します。 このレベルは、サーバーでのみ有効です。 buf パラメーターは、USER_INFO_4構造体を指します。 |
|
一方向暗号化 LAN Manager 2 を指定します。x 互換パスワード。 buf パラメーターは、USER_INFO_21構造体を指します。 |
|
ユーザー アカウントに関する詳細情報を指定します。 buf パラメーターは、USER_INFO_22構造体を指します。 |
|
ユーザー パスワードを指定します。 buf パラメーターは、USER_INFO_1003構造体を指します。 |
|
ユーザー特権レベルを指定します。 buf パラメーターは、USER_INFO_1005構造体を指します。 |
|
ユーザーのホーム ディレクトリのパスを指定します。 buf パラメーターは、USER_INFO_1006構造体を指します。 |
|
ユーザー アカウントに関連付けるコメントを指定します。 buf パラメーターは、USER_INFO_1007構造体を指します。 |
|
ユーザー アカウント属性を指定します。 buf パラメーターは、USER_INFO_1008構造体を指します。 |
|
ユーザーのログオン スクリプト ファイルのパスを指定します。 buf パラメーターは、USER_INFO_1009構造体を指します。 |
|
ユーザーのオペレーター特権を指定します。 buf パラメーターは、USER_INFO_1010構造体を指します。 |
|
ユーザーの完全な名前を指定します。 buf パラメーターは、USER_INFO_1011構造体を指します。 |
|
ユーザーに関連付けるコメントを指定します。 buf パラメーターは、USER_INFO_1012構造体を指します。 |
|
ユーザーがログオンできるワークステーションの名前を指定します。 buf パラメーターは、USER_INFO_1014構造体を指します。 |
|
ユーザー アカウントの有効期限を指定します。 buf パラメーターは、USER_INFO_1017構造体を指します。 |
|
ユーザーがログオンできる時間を指定します。 buf パラメーターは、USER_INFO_1020構造体を指します。 |
|
ユーザーの国/地域コードを指定します。 buf パラメーターは、USER_INFO_1024構造体を指します。 |
|
登録されたユーザーを表すグローバル グループの相対識別子を指定します。 buf パラメーターは、USER_INFO_1051構造体を指します。 |
|
ネットワーク ユーザーのプロファイルへのパスを指定します。 buf パラメーターは、USER_INFO_1052構造体を指します。 |
|
ユーザーのホーム ディレクトリに割り当てられるドライブ文字を指定します。 buf パラメーターは、USER_INFO_1053構造体を指します。 |
[in] buf
データを指定するバッファーへのポインター。 このデータの形式は、 level パラメーターの値によって異なります。 詳細については、「 ネットワーク管理関数バッファー」を参照してください。
[out] parm_err
ERROR_INVALID_PARAMETERの原因となるユーザー情報構造体の最初のメンバーのインデックスを受け取る値へのポインター。 このパラメーターが NULL の場合、エラー時にインデックスは返されません。 詳細については、「解説」を参照してください。
戻り値
関数が成功した場合、戻り値はNERR_Success。
関数が失敗した場合、戻り値には次のいずれかのエラー コードを指定できます。
リターン コード | 説明 |
---|---|
|
ユーザーには、要求された情報へのアクセス権がありません。 |
|
関数パラメーターの 1 つが無効です。 詳細については、「解説」を参照してください。 |
|
コンピューター名が無効です。 |
|
操作は、ドメインのプライマリ ドメイン コントローラーでのみ許可されます。 |
|
操作は、ユーザー グループ、管理者グループ、ローカル グループ、またはゲスト グループである、指定された特殊なグループでは許可されません。 |
|
操作は、最後の管理アカウントでは許可されません。 |
|
共有名またはパスワードが無効です。 |
|
パスワードが必要以上に短い。 (パスワードが長すぎる、変更履歴が最近使いすぎる、一意の文字が不足している、または別のパスワード ポリシー要件を満たしていない可能性もあります)。 |
|
ユーザー名が見つかりませんでした。 |
注釈
Active Directory のプログラミングを行う場合は、特定の Active Directory サービス インターフェイス (ADSI) メソッドを呼び出して、ネットワーク管理ユーザー関数を呼び出すことで実現できるのと同じ機能を実現できる場合があります。 詳細については、「 IADsUser と IADsComputer」を参照してください。
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-RPCE と MS-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 |