IADsContainer::MoveHere 메서드(iads.h)
IADsContainer::MoveHere 메서드는 지정된 개체를 이 인터페이스를 구현하는 컨테이너로 이동합니다. 메서드를 사용하여 개체의 이름을 바꿀 수 있습니다.
구문
HRESULT MoveHere(
[in] BSTR SourceName,
[in] BSTR NewName,
[out] IDispatch **ppObject
);
매개 변수
[in] SourceName
이동할 개체의 ADsPath 를 지정하는 null로 끝나는 유니코드 문자열입니다.
[in] NewName
컨테이너 내에서 새 개체의 상대 이름을 지정하는 null로 끝나는 유니코드 문자열입니다. 이 경우 개체가 이동되는 NULL일 수 있습니다. NULL이 아닌 경우 프로세스에서 개체의 이름이 적절하게 바뀝니다.
[out] ppObject
이동된 개체의 IDispatch 인터페이스에 대한 포인터에 대한 포인터입니다.
반환 값
이 메서드는 성공적인 작업을 위해 S_OK 포함한 표준 반환 값을 지원합니다. 오류 코드에 대한 자세한 내용은 ADSI 오류 코드를 참조하세요.
설명
Active Directory에서 동일한 도메인 내 또는 동일한 디렉터리 포리스트의 다른 도메인에서 개체를 이동할 수 있습니다. 도메인 간 이동의 경우 다음과 같은 제한 사항이 적용됩니다.
- 대상 도메인은 기본 모드여야 합니다.
- 이동할 개체는 리프 개체 또는 빈 컨테이너여야 합니다.
- NTLM(NT LAN Manager)은 인증을 수행할 수 없습니다. Kerberos 인증 또는 위임을 사용합니다. Kerberos 인증을 사용하지 않는 경우 암호는 네트워크를 통해 일반 텍스트로 전송됩니다. 이를 방지하려면 보안 인증과 함께 위임을 사용합니다.
- 전역 그룹에 속하는 보안 주체(예: 사용자, 그룹, 컴퓨터 등)는 이동할 수 없습니다. 보안 주체를 이동하면 대상의 개체에 대한 새 SID가 만들어집니다. 그러나 sIDHistory 특성에 저장된 원본의 이전 SID는 개체의 암호뿐만 아니라 유지됩니다.
Set ou = GetObject("LDAP://server1/OU=Support,DC=North,DC=Fabrikam,DC=COM")
ou.MoveHere("LDAP://server2/CN=jeffsmith,OU=Sales,DC=South,DC=Fabrikam,DC=Com", vbNullString)
서버리스 ADsPath는 원본 또는 대상 또는 둘 다에 사용할 수 있습니다.
IADsContainer::MoveHere 메서드를 사용하여 동일한 컨테이너 내의 개체 이름을 바꾸거나 다른 컨테이너 간에 개체를 이동할 수 있습니다. 개체를 이동하면 개체 RDN이 유지되지만 개체 이름을 바꾸면 RDN이 변경됩니다.
예를 들어 다음 코드 예제에서는 이름 바꾸기 작업을 수행합니다.
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=Jeff Smith,dc=dom,dc=com", "cn=Denise Smith")
다음 코드 예제에서는 이동을 수행합니다.
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sales,dc=dom,dc=com", "cn=jeffsmith")
Visual Basic 애플리케이션에서는 개체를 컨테이너 간에 이동할 때 vbNullString 을 두 번째 매개 변수로 전달할 수 있습니다.
Set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sale,dc=dom,dc=com", vbNullString)
그러나 VBScript에서는 동일한 작업을 수행할 수 없습니다. VBScript는 Visual Basic과 마찬가지로 vbNullString 을 null 문자열 대신 빈 문자열에 매핑하기 때문입니다. 이전 예제와 같이 RDN을 명시적으로 사용해야 합니다.
예제
다음 코드 예제에서는이 메서드를 사용 하 여 이름을 변경 하는 방법을 보여 주는 개체입니다.
Dim cont As IADsContainer
Dim usr As IADsUser
On Error GoTo Cleanup
' Rename an object.
Set cont = GetObject("LDAP://OU=Sales, DC=Fabrikam,DC=com")
Set usr = cont.MoveHere("LDAP://CN=jeffsmith,OU=Sales, DC=Fabrikam,DC=com", "CN=jayhenningsen")
' Move an object.
cont.MoveHere("LDAP://CN=denisesmith,OU=Engineer,DC=Fabrikam,DC=com", vbNullString)
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set cont = Nothing
Set usr = Nothing
다음 코드 예제에서는 IADsContainer::MoveHere 메서드를 사용하여 사용자 개체를 이동합니다.
/////////////////////////////////////////////
// First, bind to the destination container.
////////////////////////////////////////////
HRESULT hr;
IADsContainer *pCont=NULL;
CoInitialize(NULL);
hr = ADsGetObject(
L"LDAP://OU=MCS,DC=windows2000,DC=mytest,DC=fabrikam,DC=com",
IID_IADsContainer,
(void**) &pCont );
if ( !SUCCEEDED(hr) )
{
goto Cleanup;
}
//////////////////////////////////////////////////
// Second, move the object to the bound container.
//////////////////////////////////////////////////
IDispatch *pDisp=NULL;
hr = pCont->MoveHere(CComBSTR("LDAP://CN=Jeff Smith,OU=DSys,DC=windows2000,DC=mytest,DC=fabrikam,DC=com"), NULL, &pDisp );
pCont->Release();
if (SUCCEEDED(hr) )
{
// You can perform another operation here, such as updating attributes.
pDisp->Release();
}
Cleanup:
if(pCont)
pCont->Release();
if(pDisp)
pDisp->Release();
CoUninitialize();
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
지원되는 최소 서버 | Windows Server 2008 |
대상 플랫폼 | Windows |
헤더 | iads.h |
DLL | Activeds.dll |