Obtention d’interfaces ADSI à partir de votre extension
Une extension a souvent besoin d’obtenir des données à partir de l’objet d’annuaire auquel elle est liée. Par exemple, une extension pour un objet ordinateur peut vouloir obtenir le dnsHostName de l’objet actuel à partir du répertoire. Pour ce faire, vous pouvez facilement émettre un appel QueryInterface sur l’interface IUnknown pour l’agrégateur.
HRESULT hr;
IADs *pADs; ' ADSI Interface to get/set attributes.
hr = m_pOuterUnk->QueryInterface(IID_IADs,(void**)&pADs);
if ( SUCCEEDED(hr) )
{
VARIANT var;
VariantInit(&var);
hr = pADs ->Get(_bstr_t("dnsHostName"), &var);
if ( SUCCEEDED(hr) )
{
printf("%S\n", V_BSTR(&var));
}
VariantClear(&var);
pADs->Release();
}
Vous devez libérer l’interface immédiatement après l’avoir utilisée. Si l’extension a une référence ouverte à l’agrégateur, vous avez créé une référence circulaire et l’agrégateur ne peut pas libérer l’extension. Par conséquent, l’agrégateur ne peut pas être libéré et le résultat est des fuites de mémoire dans votre application.