Pengikatan ke Objek Anak
Di ADSI, objek kontainer mengekspos antarmuka IADsContainer . Metode IADsContainer::GetObject digunakan untuk mengikat langsung ke objek anak. Objek yang dikembalikan oleh IADsContainer::GetObject memiliki konteks keamanan yang sama dengan objek tempat metode dipanggil. Ini berarti bahwa jika kredensial alternatif digunakan, kredensial alternatif tidak harus diteruskan ke fungsi atau metode pengikatan lagi untuk mempertahankan kredensial yang sama.
Metode IADsContainer::GetObject mengambil nama khusus relatif (RDN) yang relatif terhadap objek saat ini. Metode ini juga mengambil nama kelas opsional dan mengembalikan penunjuk antarmuka IDispatch yang mewakili objek anak. Untuk mendapatkan antarmuka ADSI yang diinginkan, seperti IAD, panggil metode QueryInterface dari penunjuk antarmuka IDispatch ini.
Contoh kode C++ berikut menunjukkan fungsi yang mengambil objek anak tertentu.
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;
}