계정 잠금(WinNT 공급자)
실패한 로그온 시도 횟수를 초과하면 사용자 계정이 lockoutDuration 특성에 지정된 시간(분)에 대해 잠깁니다. IADsUser.IsAccountLocked 속성은 사용자 계정의 잠금 상태를 읽고 수정하는 데 사용할 속성으로 보이지만 WinNT ADSI 공급자에는 IsAccountLocked 속성의 사용을 제한하는 제한이 있습니다.
계정 잠금 상태 다시 설정
WinNT 공급자를 사용하는 경우 IsAccountLocked 속성은 계정 잠금을 해제하는 FALSE로만 설정할 수 있습니다. IsAccountLocked 속성을 TRUE로 설정하려고 하면 실패합니다. 시스템만 계정을 잠글 수 있습니다.
다음 코드 예제에서는 ADSI와 함께 Visual Basic을 사용하여 사용자 계정의 잠금을 해제하는 방법을 보여 줍니다.
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
다음 코드 예제에서는 ADSI와 함께 C++를 사용하여 사용자 계정의 잠금을 해제하는 방법을 보여 줍니다.
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가 포함됩니다.
다음 코드 예제에서는 ADSI와 함께 Visual Basic을 사용하여 계정이 잠겨 있는지 확인하는 방법을 보여 줍니다.
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
다음 코드 예제에서는 ADSI와 함께 C++를 사용하여 계정이 잠겨 있는지 확인하는 방법을 보여 줍니다.
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;
}