Blokada konta (dostawca WinNT)
Gdy liczba nieudanych prób logowania zostanie przekroczona, konto użytkownika zostanie zablokowane przez liczbę minut określonych przez atrybut lockoutDuration. Właściwość IADsUser.IsAccountLocked wydaje się być właściwością używaną do odczytywania i modyfikowania stanu blokady konta użytkownika, ale dostawca WinNT ADSI ma ograniczenia ograniczające użycie właściwości IsAccountLocked.
Resetowanie stanu blokady konta
W przypadku korzystania z dostawcy WinNT właściwość IsAccountLocked można ustawić tylko na wartość FALSE, co spowoduje odblokowanie konta. Próba ustawienia właściwości IsAccountLocked na true zakończy się niepowodzeniem. Tylko system może zablokować konto.
W poniższym przykładzie kodu pokazano, jak używać języka Visual Basic z interfejsem ADSI do odblokowania konta użytkownika.
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
W poniższym przykładzie kodu pokazano, jak używać języka C++ z interfejsem ADSI do odblokowania konta użytkownika.
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;
}
Odczytywanie stanu blokady konta
Za pomocą dostawcy WinNT można użyć właściwości IsAccountLocked, aby określić, czy konto jest zablokowane. Jeśli konto jest zablokowane, właściwość IsAccountLocked będzie zawierać true. Jeśli konto nie jest zablokowane, właściwość IsAccountLocked będzie zawierać FALSE.
W poniższym przykładzie kodu pokazano, jak używać języka Visual Basic z interfejsem ADSI w celu określenia, czy konto jest zablokowane.
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
W poniższym przykładzie kodu pokazano, jak używać języka C++ z interfejsem ADSI w celu określenia, czy konto jest zablokowane.
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;
}