NetUserAdd 関数 (lmaccess.h)
NetUserAdd 関数は、ユーザー アカウントを追加し、パスワードと特権レベルを割り当てます。
構文
NET_API_STATUS NET_API_FUNCTION NetUserAdd(
[in] LPCWSTR servername,
[in] DWORD level,
[in] LPBYTE buf,
[out] LPDWORD parm_err
);
パラメーター
[in] servername
関数を実行するリモート サーバーの DNS または NetBIOS 名を指定する定数文字列へのポインター。 このパラメーターが NULL の場合は、ローカル コンピューターが使用されます。
_WIN32_WINNTまたはFORCE_UNICODEが定義されている場合、この文字列は Unicode です。
[in] level
データの情報レベルを指定します。 このパラメーターには、次の値のいずれかを指定できます。
値 | 意味 |
---|---|
|
ユーザー アカウントに関する情報を指定します。 buf パラメーターは、USER_INFO_1構造体を指します。
このレベルを指定すると、呼び出しによって特定の属性が既定値に初期化されます。 詳細については、「解説」を参照してください。 |
|
ユーザー アカウントに関するレベル 1 の情報と追加の属性を指定します。 buf パラメーターは、USER_INFO_2構造体を指します。 |
|
ユーザー アカウントに関するレベル 2 の情報と追加の属性を指定します。 このレベルは、サーバーでのみ有効です。 buf パラメーターは、USER_INFO_3構造体を指します。 代わりに USER_INFO_4 を使用することをお勧めします。 |
|
ユーザー アカウントに関するレベル 2 の情報と追加の属性を指定します。 このレベルは、サーバーでのみ有効です。 buf パラメーターは、USER_INFO_4構造体を指します。
Windows 2000: このレベルはサポートされていません。 |
[in] buf
データを指定するバッファーへのポインター。 このデータの形式は、 level パラメーターの値によって異なります。 詳細については、「 ネットワーク管理関数バッファー」を参照してください。
[out] parm_err
ERROR_INVALID_PARAMETERの原因となるユーザー情報構造体の最初のメンバーのインデックスを受け取る値へのポインター。 このパラメーターが NULL の場合、エラー時にインデックスは返されません。 詳細については、 NetUserSetInfo 関数に関するページを参照してください。
戻り値
関数が成功した場合、戻り値はNERR_Success。
関数が失敗した場合、戻り値には次のいずれかのエラー コードを指定できます。
リターン コード | 説明 |
---|---|
|
ユーザーには、要求された情報へのアクセス権がありません。 |
|
コンピューター名が無効です。 |
|
操作は、ドメインのプライマリ ドメイン コントローラーでのみ許可されます。 |
|
グループは既に存在します。 |
|
ユーザー アカウントは既に存在します。 |
|
パスワードが必要以上に短い。 (パスワードが長すぎる、変更履歴が最近使いすぎる、一意の文字が不足している、または別のパスワード ポリシー要件を満たしていない可能性もあります)。 |
注釈
Active Directory のプログラミングを行う場合は、特定の Active Directory サービス インターフェイス (ADSI) メソッドを呼び出して、ネットワーク管理ユーザー関数を呼び出すことで実現できるのと同じ機能を実現できる場合があります。 詳細については、「 IADsUser と IADsComputer」を参照してください。
Active Directory を実行しているドメイン コントローラーでこの関数を呼び出すと、 セキュリティ保護可能なオブジェクトのアクセス制御リスト (ACL) に基づいてアクセスが許可または拒否されます。 既定の ACL では、Domain Admins と Account Operators のみがこの関数を呼び出すように許可されます。 メンバー サーバーまたはワークステーションでは、管理者と Power Users のみがこの関数を呼び出すことができます。 詳細については、「 ネットワーク管理機能のセキュリティ要件」を参照してください。 ACL、ACE、アクセス トークンの詳細については、「Access Control モデル」を参照してください。
ユーザー コンテナーのセキュリティ記述子は、この関数のアクセスチェックを実行するために使用されます。 呼び出し元は、ユーザー クラスの子オブジェクトを作成できる必要があります。
サーバー ユーザーは、サーバーが新しいユーザーのシステム アカウントを作成するシステムを使用する必要があります。 このアカウントの作成は、サーバーの LanMan.ini ファイル内のいくつかのパラメーターによって制御されます。
新しく追加されたユーザーが既にシステム ユーザーとして存在する場合、 USER_INFO_1 構造体の usri1_home_dir メンバーは無視されます。
NetUserAdd 関数を呼び出して情報レベル 1 を指定すると、USER_INFO_2、USER_INFO_3、およびUSER_INFO_4構造体内の追加のメンバーが既定値に初期化されます。 NetUserSetInfo 関数の後続の呼び出しを行うことで、既定値を変更できます。 指定された既定値を次に示します。 (プレフィックス usriX は、メンバーが複数のプレフィックス (usri2_やusri4_など) で始めることができることを示します。
メンバー | 既定値 |
---|---|
usriX_auth_flags | なし (0) |
usriX_full_name | なし (null 文字列) |
usriX_usr_comment | なし (null 文字列) |
usriX_parms | なし (null 文字列) |
usriX_workstations | すべて (null 文字列) |
usriX_acct_expires | Never (TIMEQ_FOREVER) |
usriX_max_storage | 無制限 (USER_MAXSTORAGE_UNLIMITED) |
usriX_logon_hours | ログオンはいつでも許可されます (各要素0xFF。すべてのビットが 1 に設定されます) |
usriX_logon_server | 任意のドメイン コントローラー (\\*) |
usriX_country_code | 0 |
usriX_code_page | 0 |
ユーザー アカウント名は 20 文字に制限され、グループ名は 256 文字に制限されます。 さらに、アカウント名をピリオドで終えることはできません。また、コンマまたは"、/、、[、]、:、|<>、+、=、;、?、*のいずれかの印刷可能な文字を含めることはできません。 名前には、印刷できない 1 から 31 の範囲の文字を含めることもできます。
例
次のコード サンプルでは、 NetUserAdd 関数の呼び出しを使用して、ユーザー アカウントを追加し、特権レベルを割り当てる方法を示します。 このコード サンプルでは、 USER_INFO_1 構造体のメンバーを入力し、情報レベル 1 を指定して NetUserAdd を呼び出します。
#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[])
{
USER_INFO_1 ui;
DWORD dwLevel = 1;
DWORD dwError = 0;
NET_API_STATUS nStatus;
if (argc != 3)
{
fwprintf(stderr, L"Usage: %s \\\\ServerName UserName\n", argv[0]);
exit(1);
}
//
// Set up the USER_INFO_1 structure.
// USER_PRIV_USER: name identifies a user,
// rather than an administrator or a guest.
// UF_SCRIPT: required
//
ui.usri1_name = argv[2];
ui.usri1_password = argv[2];
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_flags = UF_SCRIPT;
ui.usri1_script_path = NULL;
//
// Call the NetUserAdd function, specifying level 1.
//
nStatus = NetUserAdd(argv[1],
dwLevel,
(LPBYTE)&ui,
&dwError);
//
// If the call succeeds, inform the user.
//
if (nStatus == NERR_Success)
fwprintf(stderr, L"User %s has been successfully added on %s\n",
argv[2], argv[1]);
//
// 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 |