次の方法で共有


アカウント ロックアウト (WinNT プロバイダー)

失敗したログオン試行回数を超えると、lockoutDuration 属性で指定された分数だけユーザー アカウントがロックアウトされます。 IADsUser.IsAccountLocked プロパティは、ユーザー アカウントのロックアウト状態の読み取りと変更に使用するプロパティのように見えますが、WinNT ADSI プロバイダーには IsAccountLocked プロパティの使用を制限する成約があります。

アカウント ロックアウト状態のリセット

WinNT プロバイダーを使用する場合、IsAccountLocked プロパティは、アカウントのロックを解除する FALSE にのみ設定できます。 IsAccountLocked プロパティを TRUE に設定しようとすると失敗します。 アカウントをロックできるのはシステムだけです。

次のコード例は、Visual Basic と ADSI を使用してユーザー アカウントのロックを解除する方法を示しています。

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

次のコード例は、C++ と ADSI を使用してユーザー アカウントのロックを解除する方法を示しています。

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

アカウント ロックアウト状態の読み込み

WinNT プロバイダーでは、IsAccountLocked プロパティを使用して、アカウントがロックアウトされているかどうかを判断できます。アカウントがロックアウトされている場合、IsAccountLocked プロパティには TRUE が含まれます。 アカウントがロックアウトされていない場合、IsAccountLocked プロパティには FALSE が含まれます。

次のコード例は、Visual Basic と ADSI を使用して、アカウントがロックアウトされているかどうかを判断する方法を示しています。

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

次のコード例は、C++ Basic と ADSI を使用して、アカウントがロックアウトされているかどうかを判断する方法を示しています。

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