Det går inte för användaren Reading att ändra lösenord (WinNT Provider)
Möjligheten för en användare att ändra sitt eget lösenord är en behörighet som kan beviljas eller nekas. För att avgöra om användaren har beviljats den här behörigheten med WinNT-providern läser du flaggan ADS_UF_PASSWD_CANT_CHANGE för userFlags egenskapen för användarobjektet. Flaggan ADS_UF_PASSWD_CANT_CHANGE definieras i ADS_USER_FLAG_ENUM uppräkning.
Exempelkod
Följande kodexempel visar hur du hämtar flaggan ADS_UF_PASSWD_CANT_CHANGE för userFlags egenskap för ett användarobjekt.
Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Function UserCannotChangePassword(strDomain As String, strUser As String, strUserCred As String, strPassword As String) As Boolean
UserCannotChangePassword = False
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
If (oUser.Get("userFlags") And ADS_UF_PASSWD_CANT_CHANGE) <> 0 Then
UserCannotChangePassword = True
Else
UserCannotChangePassword = False
End If
End Function
Följande kodexempel visar hur du hämtar flaggan ADS_UF_PASSWD_CANT_CHANGE för userFlags egenskap för ett användarobjekt.
//***************************************************************************
//
// UserCannotChangePassword()
//
//***************************************************************************
HRESULT UserCannotChangePassword(LPCWSTR pwszDomain,
LPCWSTR pwszUser,
LPCWSTR pwszUserCred,
LPCWSTR pwszPassword,
BOOL *pfCannotChangePassword)
{
if(NULL == pwszDomain || NULL == pwszUser)
{
return E_INVALIDARG;
}
*pfCannotChangePassword = FALSE;
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))
{
CComVariant svar;
hr = pads->Get(CComBSTR("userFlags"), &svar);
if(SUCCEEDED(hr))
{
if(ADS_UF_PASSWD_CANT_CHANGE & svar.lVal)
{
*pfCannotChangePassword = TRUE;
}
else
{
*pfCannotChangePassword = FALSE;
}
}
pads->Release();
}
return hr;
}