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