Condividi tramite


Blocco account (provider WinNT)

Quando viene superato il numero di tentativi di accesso non riusciti, l'account utente viene bloccato per il numero di minuti specificato dall'attributo lockoutDuration . La proprietà IADsUser.IsAccountLocked sembra essere la proprietà da utilizzare per leggere e modificare lo stato di blocco di un account utente, ma il provider WinNT ADSI ha restrizioni che limitano l'uso della proprietà IsAccountLocked.

Reimpostazione dello stato di blocco dell'account

Quando si usa il provider WinNT, la proprietà IsAccountLocked può essere impostata solo su FAL edizione Standard, che sblocca l'account. Il tentativo di impostare la proprietà IsAccountLocked su TRUE avrà esito negativo. Solo il sistema può bloccare un account.

Nell'esempio di codice seguente viene illustrato come usare Visual Basic con ADSI per sbloccare un account utente.

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

L'esempio di codice seguente illustra come usare C++ con ADSI per sbloccare un account utente.

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;
}

Lettura dello stato di blocco dell'account

Con il provider WinNT, la proprietà IsAccountLocked può essere usata per determinare se un account è bloccato. Se un account è bloccato, la proprietà IsAccountLocked conterrà TRUE. Se un account non è bloccato, la proprietà IsAccountLocked conterrà FAL edizione Standard.

Nell'esempio di codice seguente viene illustrato come usare Visual Basic con ADSI per determinare se un account è bloccato.

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

L'esempio di codice seguente illustra come usare C++ con ADSI per determinare se un account è bloccato.

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;
}