Sdílet prostřednictvím


Uzamčení účtu (zprostředkovatel WinNT)

Pokud dojde k překročení počtu neúspěšných pokusů o přihlášení, uživatelský účet se zamkne po dobu několika minut zadaných atributem lockoutDuration. Vlastnost IADsUser.IsAccountLocked se zdá být vlastností, která se má použít ke čtení a úpravě stavu uzamčení uživatelského účtu, ale zprostředkovatel WinNT ADSI má omezení, která omezují použití IsAccountLocked vlastnost.

Resetování stavu uzamčení účtu

Při použití zprostředkovatele WinNT může být vlastnost IsAccountLocked nastavena pouze na FALSE, která účet odemkne. Pokus o nastavení vlastnosti IsAccountLocked na hodnotu TRUE selže. Účet může uzamknout jenom systém.

Následující příklad kódu ukazuje použití jazyka Visual Basic s rozhraním ADSI k odemknutí uživatelského účtu.

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

Následující příklad kódu ukazuje použití jazyka C++ s rozhraním ADSI k odemknutí uživatelského účtu.

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

Čtení stavu uzamčení účtu

U zprostředkovatele WinNT je možné použít vlastnost IsAccountLocked k určení, jestli je účet uzamčený. Pokud je účet uzamčen, bude vlastnost IsAccountLocked obsahovat TRUE. Pokud účet není uzamčen, bude vlastnost IsAccountLocked obsahovat FALSE.

Následující příklad kódu ukazuje použití jazyka Visual Basic s rozhraním ADSI k určení, zda je účet uzamčen.

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

Následující příklad kódu ukazuje použití jazyka C++ s rozhraním ADSI k určení, zda je účet uzamčen.

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