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 정의된 경우 이 문자열은 유니코드입니다.
[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
데이터를 지정하는 버퍼에 대한 포인터입니다. 이 데이터의 형식은 수준 매개 변수의 값에 따라 달라집니다. 자세한 내용은 네트워크 관리 함수 버퍼를 참조하세요.
[out] parm_err
ERROR_INVALID_PARAMETER 발생시키는 사용자 정보 구조의 첫 번째 멤버 인덱스를 수신하는 값에 대한 포인터입니다. 이 매개 변수가 NULL이면 인덱스가 오류로 반환되지 않습니다. 자세한 내용은 NetUserSetInfo 함수를 참조하세요.
반환 값
함수가 성공하면 반환 값이 NERR_Success.
함수가 실패하면 반환 값은 다음 오류 코드 중 하나일 수 있습니다.
반환 코드 | 설명 |
---|---|
|
사용자는 요청한 정보에 대한 액세스 권한이 없습니다. |
|
컴퓨터 이름이 잘못된 경우 |
|
작업은 도메인의 기본 도메인 컨트롤러에서만 허용됩니다. |
|
그룹이 이미 있습니다. |
|
사용자 계정이 이미 있습니다. |
|
암호가 필요 이상으로 짧습니다. (암호가 너무 길거나, 변경 기록에서 너무 최근이거나, 고유 문자가 충분하지 않거나, 다른 암호 정책 요구 사항을 충족하지 않을 수도 있습니다.) |
설명
Active Directory를 프로그래밍하는 경우 특정 ADSI(Active Directory Service Interface) 메서드를 호출하여 네트워크 관리 사용자 함수를 호출하여 달성할 수 있는 동일한 기능을 달성할 수 있습니다. 자세한 내용은 IADsUser 및 IADsComputer를 참조하세요.
Active Directory를 실행하는 도메인 컨트롤러에서 이 함수를 호출하는 경우 보안 개체에 대한 ACL(액세스 제어 목록)에 따라 액세스가 허용되거나 거부됩니다. 기본 ACL은 도메인 관리자 및 계정 운영자만 이 함수를 호출할 수 있도록 허용합니다. 구성원 서버 또는 워크스테이션에서 관리자 및 전원 사용자만 이 함수를 호출할 수 있습니다. 자세한 내용은 네트워크 관리 함수에 대한 보안 요구 사항을 참조하세요. ACL, ACL 및 액세스 토큰에 대한 자세한 내용은 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 구조체의 멤버를 채우고 NetUserAdd를 호출하여 정보 수준 1을 지정합니다.
#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(Lm.h 포함) |
라이브러리 | Netapi32.lib |
DLL | Netapi32.dll |