Kontoutelåsning (WinNT-provider)
När antalet misslyckade inloggningsförsök överskrids blir användarkontot utelåst under det antal minuter som anges av attributet lockoutDuration. Egenskapen IADsUser.IsAccountLocked verkar vara egenskapen som ska användas för att läsa och ändra utelåsningstillståndet för ett användarkonto, men WinNT ADSI-providern har begränsningar som begränsar användningen av egenskapen IsAccountLocked.
Återställa kontoutelåsningsstatusen
När du använder WinNT-providern kan egenskapen IsAccountLocked endast anges till FALSE, som låser upp kontot. Ett försök att ange egenskapen IsAccountLocked till TRUE- misslyckas. Endast systemet kan låsa ett konto.
Följande kodexempel visar hur du använder Visual Basic med ADSI för att låsa upp ett användarkonto.
Public Sub UnlockAccount(AccountDN As String)
Dim usr As IADsUser
' Bind to the user account.
Set usr = GetObject("WinNT://" + AccountDN)
' Set the IsAccountLocked property to False
usr.IsAccountLocked = False
' Flush the cached attributes to the server.
usr.SetInfo
End Sub
Följande kodexempel visar hur du använder C++ med ADSI för att låsa upp ett användarkonto.
HRESULT UnlockAccount(LPCWSTR pwszUserDN)
{
if(!pwszUserDN)
{
return E_INVALIDARG;
}
// Build the ADsPath.
CComBSTR sbstr = "WinNT://";
sbstr += pwszUserDN;
HRESULT hr;
CComPtr<IADsUser> spADsUser;
// Bind to the object.
hr = ADsOpenObject(sbstr,
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADsUser,
(void**)&spADsUser);
if(S_OK != hr)
{
return hr;
}
// Set the IsAccountLocked property to FALSE;
hr = spADsUser->put_IsAccountLocked(VARIANT_FALSE);
// Commit the changes to the server.
hr = spADsUser->SetInfo();
return hr;
}
Läsa kontoutelåsningsstatus
Med WinNT-providern kan egenskapen IsAccountLocked användas för att avgöra om ett konto är utelåst. Om ett konto är utelåst innehåller egenskapen IsAccountLockedTRUE. Om ett konto inte är utelåst innehåller egenskapen IsAccountLockedFALSE.
Följande kodexempel visar hur du använder Visual Basic med ADSI för att avgöra om ett konto är utelåst.
Public Function IsAccountLocked(AccountDN As String) As Boolean
Dim oUser As IADsUser
' Bind to the object.
Set oUser = GetObject("WinNT://" + AccountDN)
' Get the IsAccountLocked property.
IsAccountLocked = oUser.IsAccountLocked
End Function
Följande kodexempel visar hur du använder C++ med ADSI för att avgöra om ett konto är utelåst.
HRESULT IsAccountLocked(LPCWSTR pwszUserDN, BOOL *pfLocked)
{
if(!pwszUserDN || !pfLocked)
{
return E_INVALIDARG;
}
*pfLocked = FALSE;
// Build the ADsPath.
CComBSTR sbstr = "WinNT://";
sbstr += pwszUserDN;
HRESULT hr;
CComPtr<IADsUser> spADsUser;
// Bind to the object.
hr = ADsOpenObject(sbstr,
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADsUser,
(void**)&spADsUser);
if(S_OK != hr)
{
return hr;
}
VARIANT_BOOL vfLocked;
hr = spADsUser>get_IsAccountLocked(&vfLocked);
if(S_OK != hr)
{
return hr;
}
*pfLocked = (vfLocked != 0);
return hr;
}