Kontosperrung (WinNT-Anbieter)

Wenn die Anzahl fehlgeschlagener 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 zum Lesen und Ändern des Sperrstatus eines Benutzerkontos verwendet werden soll. Der WinNT ADSI-Anbieter verfügt jedoch über 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. Beim Festlegen der IsAccountLocked-Eigenschaft auf TRUE ist ein Fehler zu sehen. Nur das System kann ein Konto sperren.

Im folgenden Codebeispiel wird veranschaulicht, wie sie Visual Basic ADSI verwenden, um ein Benutzerkonto zu entsperren.

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 C++ mit ADSI zum Entsperren eines Benutzerkontos verwendet wird.

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 Kontosperrungsstatus

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-Eigenschaft TRUE. Wenn ein Konto nicht gesperrt ist, enthält die IsAccountLocked-Eigenschaft FALSE.

Im folgenden Codebeispiel wird veranschaulicht, wie sie Visual Basic ADSI verwenden, um zu bestimmen, 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 C++ mit ADSI verwendet wird, 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;
}