系結至子物件
在 ADSI 中,容器物件會 公開 IADsContainer 介面。 IADsContainer::GetObject 方法可用來直接系結至子物件。 IADsContainer::GetObject 傳回的物件與呼叫方法的物件具有相同的安全性內容。 這表示如果使用替代認證,則替代認證不需要再次傳遞至系結函式或方法,即可維護相同的認證。
IADsContainer::GetObject 方法會採用相對於目前對象的相對辨別名稱 (RDN)。 此方法也會採用選擇性類別名稱,並傳 回代表子物件的IDispatch 介面指標。 若要取得所需的 ADSI 介面,例如 IAD,請呼叫這個 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;
}