NetUserChangePassword 함수(lmaccess.h)
NetUserChangePassword 함수는 지정된 네트워크 서버 또는 도메인에 대한 사용자의 암호를 변경합니다.
구문
NET_API_STATUS NET_API_FUNCTION NetUserChangePassword(
[in] LPCWSTR domainname,
[in] LPCWSTR username,
[in] LPCWSTR oldpassword,
[in] LPCWSTR newpassword
);
매개 변수
[in] domainname
함수를 실행할 원격 서버 또는 도메인의 DNS 또는 NetBIOS 이름을 지정하는 상수 문자열에 대한 포인터입니다. 이 매개 변수가 NULL이면 호출자의 로그온 도메인이 사용됩니다.
[in] username
사용자 이름을 지정하는 상수 문자열에 대한 포인터입니다. NetUserChangePassword 함수는 지정된 사용자의 암호를 변경합니다.
이 매개 변수가 NULL이면 호출자의 로그온 이름이 사용됩니다. 자세한 내용은 아래 설명 부분을 참조하십시오.
[in] oldpassword
사용자의 이전 암호를 지정하는 상수 문자열에 대한 포인터입니다.
[in] newpassword
사용자의 새 암호를 지정하는 상수 문자열에 대한 포인터입니다.
반환 값
함수가 성공하면 반환 값이 NERR_Success.
함수가 실패하면 반환 값은 다음 오류 코드 중 하나일 수 있습니다.
반환 코드 | 설명 |
---|---|
|
사용자는 요청한 정보에 대한 액세스 권한이 없습니다. |
|
사용자가 잘못된 암호를 입력했습니다. |
|
컴퓨터 이름이 잘못된 경우 |
|
작업은 도메인의 기본 도메인 컨트롤러에서만 허용됩니다. |
|
사용자 이름을 찾을 수 없습니다. |
|
암호가 필요 이상으로 짧습니다. (암호가 너무 길거나, 변경 기록에서 너무 최근이거나, 고유 문자가 충분하지 않거나, 다른 암호 정책 요구 사항을 충족하지 않을 수도 있습니다.) |
설명
Active Directory를 프로그래밍하는 경우 특정 ADSI(Active Directory Service Interface) 메서드를 호출하여 네트워크 관리 사용자 함수를 호출하여 달성할 수 있는 동일한 결과를 얻을 수 있습니다. 자세한 내용은 IADsUser 및 IADsComputer를 참조하세요.
애플리케이션이 Active Directory를 실행하는 도메인 컨트롤러에서 NetUserChangePassword 함수를 호출하는 경우 보안 개체에 대한 ACL(액세스 제어 목록)에 따라 액세스가 허용되거나 거부됩니다. 기본 ACL은 도메인 관리자 및 계정 운영자만 이 함수를 호출할 수 있도록 허용합니다. 구성원 서버 또는 워크스테이션에서 관리자 및 전원 사용자만 이 함수를 호출할 수 있습니다. 사용자는 자신의 암호를 변경할 수 있습니다. 자세한 내용은 네트워크 관리 함수에 대한 보안 요구 사항을 참조하세요. ACL, ACL 및 액세스 토큰에 대한 자세한 내용은 Access Control 모델을 참조하세요.
User 개체의 보안 설명자는 이 함수에 대한 액세스 검사 수행하는 데 사용됩니다. 또한 호출자에게 User 개체에 대한 "암호 변경" 제어 액세스 권한이 있어야 합니다. 이 권한은 기본적으로 익명 로그온 및 모든 사람에게 부여됩니다.
함수가 성공하려면 oldpassword 매개 변수가 현재 존재하는 암호와 일치해야 합니다.
경우에 따라 NetUserChangePassword 함수를 호출하는 프로세스도 SE_CHANGE_NOTIFY_NAME 권한을 사용하도록 설정해야 합니다. 그렇지 않으면 NetUserChangePassword 가 실패하고 GetLastError가 ERROR_ACCESS_DENIED 반환합니다. LocalSystem 계정 또는 관리자 그룹의 구성원인 계정에는 이 권한이 필요하지 않습니다. 기본적으로 모든 사용자에 대해 SE_CHANGE_NOTIFY_NAME 사용하도록 설정되지만 일부 관리자는 모든 사용자에 대한 권한을 사용하지 않도록 설정할 수 있습니다. 계정 권한에 대한 자세한 내용은 권한 및 권한 부여 상수를 참조하세요.
사용자가 NetUserGetInfo 및 NetUserSetInfo 함수를 사용하여 다음 로그온에서 로그온 암호를 변경하도록 강제하는 방법을 보여 주는 코드 샘플은 사용자에게 로그온 암호 변경 강제 적용을 참조하세요.
사용자 계정 이름은 20자로 제한되고 그룹 이름은 256자로 제한됩니다. 또한 계정 이름은 마침표로 종료할 수 없으며 쉼표 또는 인쇄 가능한 문자 중 ", /, , [, ], :, |, <, , >+, =, ;, ?, *를 포함할 수 없습니다. 또한 이름은 인쇄할 수 없는 1-31 범위의 문자를 포함할 수 없습니다.
NetUserChangePassword 함수는 네트워크를 통해 원격 서버로 전송될 때 oldpassword 및 newpassword 매개 변수를 보호하는 방법을 제어하지 않습니다. 이러한 매개 변수의 암호화는 네트워크 전송을 제공하는 네트워크 리렉터에서 지원하는 RPC(원격 프로시저 호출) 메커니즘에 의해 처리됩니다. 암호화는 로컬 컴퓨터에서 지원하는 보안 메커니즘과 도메인 이름 매개 변수에 지정된 원격 네트워크 서버 또는 도메인에서 지원하는 보안 메커니즘에 의해 제어됩니다. Microsoft 네트워크 리디렉션기가 사용되고 원격 네트워크 서버가 Microsoft Windows를 실행하는 경우 보안에 대한 자세한 내용은 MS-RPCE, MS-SAMR, MS-SPNG 및 MS-NLMP에 대한 프로토콜 설명서를 참조하세요.
예제
다음 코드 샘플에서는 NetUserChangePassword 함수를 호출하여 사용자의 암호를 변경하는 방법을 보여 줍니다. 함수에 대한 모든 매개 변수가 필요합니다.
#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 dwError = 0;
NET_API_STATUS nStatus;
//
// All parameters are required.
//
if (argc != 5)
{
fwprintf(stderr, L"Usage: %s \\\\ServerName UserName OldPassword NewPassword\n", argv[0]);
exit(1);
}
//
// Call the NetUserChangePassword function.
//
nStatus = NetUserChangePassword(argv[1], argv[2], argv[3], argv[4]);
//
// If the call succeeds, inform the user.
//
if (nStatus == NERR_Success)
fwprintf(stderr, L"User password has been changed successfully\n");
//
// 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 |