Lier à des objets enfants
Dans ADSI, un objet conteneur expose l’interface IADsContainer . La méthode IADsContainer :: GetObject est utilisée pour effectuer une liaison directe à un objet enfant. L’objet retourné par IADsContainer :: GetObject a le même contexte de sécurité que l’objet sur lequel la méthode a été appelée. Cela signifie que si d’autres informations d’identification sont utilisées, les autres informations d’identification n’ont pas besoin d’être transmises à nouveau à la fonction ou à la méthode de liaison pour conserver les mêmes informations d’identification.
La méthode IADsContainer :: GetObject accepte un nom unique relatif (RDN) relatif à l’objet actuel. Cette méthode prend également un nom de classe facultatif et retourne un pointeur d’interface IDispatch qui représente l’objet enfant. Pour obtenir l’interface ADSI souhaitée, comme IADs, appelez la méthode QueryInterface de ce pointeur d’interface IDispatch .
L’exemple de code C++ suivant illustre une fonction qui récupère un objet enfant spécifié.
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;
}