다음을 통해 공유


자식 개체에 바인딩

ADSI에서 컨테이너 개체는 IADsContainer 인터페이스를 노출합니다 . IADsContainer::GetObject 메서드는 자식 개체에 직접 바인딩하는 데 사용됩니다. IADsContainer::GetObject에서 반환된 개체에는 메서드가 호출된 개체와 동일한 보안 컨텍스트가 있습니다. 즉, 대체 자격 증명을 사용하는 경우 동일한 자격 증명을 유지 관리하기 위해 대체 자격 증명을 바인딩 함수 또는 메서드에 다시 전달할 필요가 없습니다.

IADsContainer::GetObject 메서드는 현재 개체를 기준으로 하는 RDN(상대 고유 이름)을 사용합니다. 또한 이 메서드는 선택적 클래스 이름을 사용하고 자식 개체를 나타내는 IDispatch 인터페이스 포인터를 반환합니다. IAD와 같은 원하는 ADSI 인터페이스를 가져오려면 이 IDispatch 인터페이스 포인터의 QueryInterface 메서드를 호출합니다.

다음 C++ 코드 예제에서는 지정된 자식 개체를 검색하는 함수를 보여 줍니다.

HRESULT GetChildObject(IADs *pObject, 
                       LPCWSTR pwszClass, 
                       LPCWSTR pwszRDN, 
                       IADs **ppChild)
{
    if(NULL == ppChild)
    {
        return E_INVALIDARG;
    }

    *ppChild = NULL;
    
    if((NULL == pObject) || (NULL == pwszRDN))
    {
        return E_INVALIDARG;
    }

    HRESULT hr;
    IADsContainer *pCont;

    hr = pObject->QueryInterface(IID_IADsContainer, (LPVOID*)&pCont);
    if(SUCCEEDED(hr))
    {
        BSTR bstrClass = NULL;
        if(pwszClass)
        {
            bstrClass = SysAllocString(pwszClass);
        }

        BSTR bstrRDN = SysAllocString(pwszRDN);
        if(bstrRDN)
        {
            IDispatch *pDisp;
            
            hr = pCont->GetObject(bstrClass, bstrRDN, &pDisp);
            if(SUCCEEDED(hr))
            {
                hr = pDisp->QueryInterface(IID_IADs, (LPVOID*)ppChild);
                
                pDisp->Release();
            }

        }
        else
        {
            hr = E_OUTOFMEMORY;
        }

        if(bstrRDN)
        {
            SysFreeString(bstrRDN);
        }

        if(bstrClass)
        {
            SysFreeString(bstrClass);
        }


        pCont->Release();
    }
    
    return hr;
}