Kontosperrung (WinNT-Anbieter)
Wenn die Anzahl der fehlgeschlagenen Anmeldeversuche überschritten wird, wird das Benutzerkonto für die vom lockoutDuration-Attribut angegebene Anzahl von Minuten gesperrt. Die IADsUser.IsAccountLocked-Eigenschaft scheint die Eigenschaft zu sein, die verwendet werden soll, um den Sperrstatus eines Benutzerkontos zu lesen und zu ändern, aber der WinNT ADSI-Anbieter hat Einschränkungen, die die Verwendung der IsAccountLocked-Eigenschaft einschränken.
Zurücksetzen des Kontosperrungsstatus
Bei Verwendung des WinNT-Anbieters kann die IsAccountLocked-Eigenschaft nur auf FALSE festgelegt werden, wodurch das Konto entsperrt wird. Der Versuch, die IsAccountLocked-Eigenschaft auf TRUE festzulegen, schlägt fehl. Nur das System kann ein Konto sperren.
Im folgenden Codebeispiel wird 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 die IsAccountLocked-Eigenschaft verwendet werden, um zu bestimmen, 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 zu ermitteln, 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 veranschaulicht, wie Sie C++ mit ADSI verwenden, um zu bestimmen, 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;
}