Kontosperrung (WinNT-Anbieter)
Wenn die Anzahl der fehlgeschlagenen Anmeldeversuche überschritten wird, wird das Benutzerkonto für die Anzahl der Minuten gesperrt, die durch das attribut lockoutDuration angegeben wird. Die IADsUser.IsAccountLocked--Eigenschaft scheint die Eigenschaft zu sein, die zum Lesen und Ändern des Sperrzustands eines Benutzerkontos verwendet werden soll, aber der WinNT ADSI-Anbieter hat Einschränkungen, die die Verwendung der IsAccountLocked-Eigenschaft einschränken.
Zurücksetzen des Kontosperrstatus
Bei Verwendung des WinNT-Anbieters kann die IsAccountLocked--Eigenschaft nur auf FALSE-festgelegt werden, wodurch das Konto entsperrt wird. Wenn Sie versuchen, die IsAccountLocked- eigenschaft auf TRUE- festzulegen, tritt ein Fehler auf. Nur das System kann ein Konto sperren.
Das folgende Codebeispiel veranschaulicht, wie Visual Basic mit ADSI zum Entsperren eines Benutzerkontos verwendet wird.
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
Im folgenden Codebeispiel wird veranschaulicht, wie Sie C++ mit ADSI verwenden, um ein Benutzerkonto zu entsperren.
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;
}
Lesen des Kontosperrstatus
Mit dem WinNT-Anbieter kann mithilfe der IsAccountLocked-eigenschaft ermittelt werden, ob ein Konto gesperrt ist. Wenn ein Konto gesperrt ist, enthält die IsAccountLocked-eigenschaftTRUE. Wenn ein Konto nicht gesperrt ist, enthält die IsAccountLocked-eigenschaftFALSE-.
Im folgenden Codebeispiel wird veranschaulicht, wie Visual Basic mit ADSI verwendet wird, um festzustellen, ob ein Konto gesperrt ist.
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
Im folgenden Codebeispiel wird die Verwendung von C++ mit ADSI veranschaulicht, um festzustellen, ob ein Konto gesperrt ist.
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;
}