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

데이터의 정보 수준을 지정합니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
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 구조를 가리킵니다.

Windows 2000: 이 수준은 지원되지 않습니다.

[in] buf

데이터를 지정하는 버퍼에 대한 포인터입니다. 이 데이터의 형식은 수준 매개 변수의 값에 따라 달라집니다. 자세한 내용은 네트워크 관리 함수 버퍼를 참조하세요.

[out] parm_err

ERROR_INVALID_PARAMETER 발생시키는 사용자 정보 구조의 첫 번째 멤버 인덱스를 수신하는 값에 대한 포인터입니다. 이 매개 변수가 NULL이면 인덱스가 오류로 반환되지 않습니다. 자세한 내용은 NetUserSetInfo 함수를 참조하세요.

반환 값

함수가 성공하면 반환 값이 NERR_Success.

함수가 실패하면 반환 값은 다음 오류 코드 중 하나일 수 있습니다.

반환 코드 설명
ERROR_ACCESS_DENIED
사용자는 요청한 정보에 대한 액세스 권한이 없습니다.
NERR_InvalidComputer
컴퓨터 이름이 잘못된 경우
NERR_NotPrimary
작업은 도메인의 기본 도메인 컨트롤러에서만 허용됩니다.
NERR_GroupExists
그룹이 이미 있습니다.
NERR_UserExists
사용자 계정이 이미 있습니다.
NERR_PasswordTooShort
암호가 필요 이상으로 짧습니다. (암호가 너무 길거나, 변경 기록에서 너무 최근이거나, 고유 문자가 충분하지 않거나, 다른 암호 정책 요구 사항을 충족하지 않을 수도 있습니다.)

설명

Active Directory를 프로그래밍하는 경우 특정 ADSI(Active Directory Service Interface) 메서드를 호출하여 네트워크 관리 사용자 함수를 호출하여 달성할 수 있는 동일한 기능을 달성할 수 있습니다. 자세한 내용은 IADsUserIADsComputer를 참조하세요.

Active Directory를 실행하는 도메인 컨트롤러에서 이 함수를 호출하는 경우 보안 개체에 대한 ACL(액세스 제어 목록)에 따라 액세스가 허용되거나 거부됩니다. 기본 ACL은 도메인 관리자 및 계정 운영자만 이 함수를 호출할 수 있도록 허용합니다. 구성원 서버 또는 워크스테이션에서 관리자 및 전원 사용자만 이 함수를 호출할 수 있습니다. 자세한 내용은 네트워크 관리 함수에 대한 보안 요구 사항을 참조하세요. ACL, ACL 및 액세스 토큰에 대한 자세한 내용은 Access Control 모델을 참조하세요.

사용자 컨테이너의 보안 설명자는 이 함수에 대한 액세스 검사 수행하는 데 사용됩니다. 호출자는 사용자 클래스의 자식 개체를 만들 수 있어야 합니다.

서버 사용자는 서버가 새 사용자에 대한 시스템 계정을 만드는 시스템을 사용해야 합니다. 이 계정의 생성은 서버의 LanMan.ini 파일에 있는 여러 매개 변수에 의해 제어됩니다.

새로 추가된 사용자가 시스템 사용자로 이미 있는 경우 USER_INFO_1 구조의 usri1_home_dir 멤버는 무시됩니다.

NetUserAdd 함수를 호출하고 정보 수준 1을 지정하면 호출은 USER_INFO_2, USER_INFO_3USER_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

추가 정보

NetUserDel

NetUserEnum

NetUserSetInfo

네트워크 관리 함수

네트워크 관리 개요

USER_INFO_1

USER_INFO_2

USER_INFO_4

사용자 함수