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 관리자 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

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

[out] parm_err

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

반환 값

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

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

반환 코드 설명
ERROR_ACCESS_DENIED
사용자는 요청한 정보에 대한 액세스 권한이 없습니다.
ERROR_INVALID_PARAMETER
함수 매개 변수 중 하나가 잘못되었습니다. 자세한 내용은 아래 설명 부분을 참조하십시오.
NERR_InvalidComputer
컴퓨터 이름이 잘못된 경우
NERR_NotPrimary
작업은 도메인의 기본 도메인 컨트롤러에서만 허용됩니다.
NERR_SpeGroupOp
사용자 그룹, 관리 그룹, 로컬 그룹 또는 게스트 그룹인 지정된 특수 그룹에서는 작업이 허용되지 않습니다.
NERR_LastAdmin
마지막 관리 계정에서는 작업이 허용되지 않습니다.
NERR_BadPassword
공유 이름 또는 암호가 잘못되었습니다.
NERR_PasswordTooShort
암호가 필요 이상으로 짧습니다. (암호가 너무 길거나, 변경 기록에서 너무 최근이거나, 고유 문자가 충분하지 않거나, 다른 암호 정책 요구 사항을 충족하지 않을 수도 있습니다.)
NERR_UserNotFound
사용자 이름을 찾을 수 없습니다.

설명

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

Active Directory를 실행하는 도메인 컨트롤러에서 이 함수를 호출하는 경우 보안 개체에 대한 ACL(액세스 제어 목록)에 따라 액세스가 허용되거나 거부됩니다. 기본 ACL은 도메인 관리자 및 계정 운영자만 이 함수를 호출할 수 있도록 허용합니다. 구성원 서버 또는 워크스테이션에서 관리자 및 전원 사용자만 이 함수를 호출할 수 있습니다. 자세한 내용은 네트워크 관리 함수에 대한 보안 요구 사항을 참조하세요. ACL, ACL 및 액세스 토큰에 대한 자세한 내용은 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 기본적으로 인증된 사용자에게 부여되는 도메인 개체에 대한 "암호 업데이트가 필요하지 않습니다." 액세스 권한을 제어합니다.
UF_DONT_EXPIRE_PASSWD "암호 제거"는 기본적으로 인증된 사용자에게 부여되는 도메인 개체의 액세스를 제어합니다.
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 기본적으로 인증된 사용자에게 부여되는 도메인 개체의 "사용자당 역방향 암호화된 암호 사용" 제어 액세스 권한
UF_SERVER_TRUST_ACCOUNT "도메인에서 복제본(replica) 추가/제거" 도메인 개체의 액세스 권한을 제어합니다. 이 액세스 권한은 기본적으로 Administrators에게 부여됩니다.
 

권한 상수 목록은 권한 부여 상수를 참조하세요.

계정의 새 이름을 지정하는 올바른 방법은 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 지정합니다. 그런 다음, 샘플은 NetUserSetInfo를 호출하여 정보 수준 0을 지정합니다.

#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(Lm.h 포함)
라이브러리 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

사용자 함수