Dela via


Kontoutelåsning (WinNT-provider)

När antalet misslyckade inloggningsförsök överskrids blir användarkontot utelåst under det antal minuter som anges av attributet lockoutDuration. Egenskapen IADsUser.IsAccountLocked verkar vara egenskapen som ska användas för att läsa och ändra utelåsningstillståndet för ett användarkonto, men WinNT ADSI-providern har begränsningar som begränsar användningen av egenskapen IsAccountLocked.

Återställa kontoutelåsningsstatusen

När du använder WinNT-providern kan egenskapen IsAccountLocked endast anges till FALSE, som låser upp kontot. Ett försök att ange egenskapen IsAccountLocked till TRUE- misslyckas. Endast systemet kan låsa ett konto.

Följande kodexempel visar hur du använder Visual Basic med ADSI för att låsa upp ett användarkonto.

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

Följande kodexempel visar hur du använder C++ med ADSI för att låsa upp ett användarkonto.

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

Läsa kontoutelåsningsstatus

Med WinNT-providern kan egenskapen IsAccountLocked användas för att avgöra om ett konto är utelåst. Om ett konto är utelåst innehåller egenskapen IsAccountLockedTRUE. Om ett konto inte är utelåst innehåller egenskapen IsAccountLockedFALSE.

Följande kodexempel visar hur du använder Visual Basic med ADSI för att avgöra om ett konto är utelåst.

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

Följande kodexempel visar hur du använder C++ med ADSI för att avgöra om ett konto är utelåst.

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