다음을 통해 공유


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는 개체의 암호뿐만 아니라 유지됩니다.
참고 Movetree.exe 유틸리티를 사용하여 다른 도메인 간에 하위 트리를 이동합니다. Movetree 명령줄 도구를 사용하여 원본 도메인에서 대상 도메인으로 개체를 이동하려면 원본 도메인의 RID master 역할을 보유하는 도메인 컨트롤러에 연결해야 합니다. RID master 사용할 수 없는 경우 개체를 다른 도메인으로 이동할 수 없습니다. Movetree.exe 도구를 사용하여 개체를 한 도메인에서 다른 도메인으로 이동하려고 하고 RID master 아닌 원본 도메인 컨트롤러를 지정하면 지정되지 않은 "Movetree 실패" 오류 메시지가 표시됩니다.
 
참고ADsOpenObject 함수를 사용하여 ADSI 개체에 바인딩하는 경우 IADsContainer::MoveHere를 사용하여 도메인 간 이동을 만들려면 이 함수의 dwReserved 매개 변수에 ADS_AUTHENTICATION_ENUM ADS_USE_DELEGATION 플래그를 사용해야 합니다. ADsOpenObject 함수는 IADsOpenDSObject::OpenDsObject 메서드와 동일합니다. 마찬가지로 OpenDsObject 메서드를 사용하여 ADSI 개체에 바인딩하면 IADsContainer::MoveHere를 사용하여 도메인 간 이동을 수행하려면 이 메서드의 InReserved 매개 변수에 ADS_AUTHENTICATION_ENUM ADS_USE_DELEGATION플래그가 포함되어야 합니다.
 
다음 코드 예제에서는 사용자 "jeffsmith"를 "South.Fabrikam.Com" 도메인에서 "North.Fabrikam.Com" 도메인으로 이동합니다. 먼저 대상 컨테이너에 대한 IADsContainer 포인터를 가져오고 MoveHere 호출은 이동할 개체의 경로를 지정합니다.
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을 명시적으로 사용해야 합니다.

참고 WinNT 공급자는 IADsContainer::MoveHere를 지원하지만 도메인 내에서 사용자 & 그룹의 이름을 바꾸는 경우에만 지원합니다.
 

예제

다음 코드 예제에서는이 메서드를 사용 하 여 이름을 변경 하는 방법을 보여 주는 개체입니다.

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

추가 정보

ADSI 오류 코드

ADS_AUTHENTICATION_ENUM

ADsOpenObject

IADsContainer

IADsContainer::CopyHere

IADsOpenDSObject::OpenDsObject

IDispatch