사용자 수정 암호를 변경할 수 없음(WinNT 공급자)
사용자가 자신의 암호를 변경할 수 있는 권한은 부여되거나 거부될 수 있는 권한입니다. 이 권한을 거부하려면 사용자 개체의 userFlags 속성에 ADS_UF_PASSWD_CANT_CHANGE 플래그를 추가합니다. 이 권한을 부여하려면 사용자 개체의 userFlags 속성에서 ADS_UF_PASSWD_CANT_CHANGE 플래그를 제거합니다.
코드 예
다음 코드 예제에서는 사용자 개체의 userFlags 속성의 ADS_UF_PASSWD_CANT_CHANGE 플래그를 변경하는 방법을 보여 줍니다.
Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Sub SetUserCannotChangePassword(strDomain As String, strUser As String, strUserCred As String, strPassword As String, fUserCannotChangePassword As Boolean)
Dim oUser As IADs
strPath = "WinNT://" + strDomain + "/" + strUser
If "" <> strUserCred Then
Dim dso As IADsOpenDSObject
' Bind to the group with the specified user name and password.
Set dso = GetObject("WinNT:")
Set oUser = dso.OpenDSObject(strPath, strUserCred, strPassword, 1)
Else
' Bind to the group with the current credentials.
Set oUser = GetObject(strPath)
End If
lUserFlags = oUser.Get("userFlags")
If fUserCannotChangePassword Then
lUserFlags = lUserFlags Or ADS_UF_PASSWD_CANT_CHANGE
Else
lUserFlags = lUserFlags And Not ADS_UF_PASSWD_CANT_CHANGE
End If
' Modify the userFlags property.
oUser.Put "userFlags", lUserFlags
' Commit the changes to the server.
oUser.SetInfo
End Sub
다음 코드 예제에서는 사용자 개체의 userFlags 속성의 ADS_UF_PASSWD_CANT_CHANGE 플래그를 변경하는 방법을 보여 줍니다.
//***************************************************************************
// SetUserCannotChangePassword()
//***************************************************************************
HRESULT SetUserCannotChangePassword(LPCWSTR pwszDomain,
LPCWSTR pwszUser,
LPCWSTR pwszUserCred,
LPCWSTR pwszPassword,
BOOL fCannotChangePassword)
{
if(NULL == pwszDomain ||
NULL == pwszUser)
{
return E_INVALIDARG;
}
HRESULT hr;
IADs *pads;
CComBSTR sbstrADsPath = L"WinNT://";
sbstrADsPath += pwszDomain;
sbstrADsPath += "/";
sbstrADsPath += pwszUser;
hr = ADsOpenObject( sbstrADsPath,
pwszUserCred,
pwszPassword,
ADS_SECURE_AUTHENTICATION,
IID_IADs,
(void**)&pads);
if(SUCCEEDED(hr))
{
CComBSTR sbstrPropName = "userFlags";
CComVariant svar;
hr = pads->Get(sbstrPropName, &svar);
if(SUCCEEDED(hr))
{
if(fCannotChangePassword)
{
svar.lVal |= ADS_UF_PASSWD_CANT_CHANGE;
}
else
{
svar.lVal &= ~ADS_UF_PASSWD_CANT_CHANGE;
}
// Perform the change.
hr = pads->Put(sbstrPropName, svar);
// Commit the change.
hr = pads->SetInfo();
}
pads->Release();
}
return hr;
}