Récupération de l’attribut objectClass
L’attribut objectClass contient la classe dont l’objet est un instance, ainsi que toutes les classes dont cette classe est dérivée. Par exemple, la classe utilisateur hérite de top, person et organizationalPerson ; par conséquent, l’attribut objectClass contient les noms de ces classes, ainsi que l’utilisateur. Alors, comment savoir de quelle classe l’objet est un instance ? L’attribut objectClass est le seul attribut avec plusieurs valeurs qui a des valeurs triées. La première valeur est le haut de la hiérarchie de classe, qui est la classe supérieure, et la dernière valeur est la classe la plus dérivée, qui est la classe dont l’objet est un instance.
La fonction suivante prend un pointeur vers une colonne contenant un attribut objectClass et retourne l’objetClass instancié de l’objet .
HRESULT GetClass(ADS_SEARCH_COLUMN *pcol, LPOLESTR *ppClass)
{
if (!pcol)
return E_POINTER;
HRESULT hr = E_FAIL;
if (ppClass)
{
LPOLESTR szClass = new OLECHAR[MAX_PATH];
wcscpy_s(szClass, L"");
if ( _wcsicmp(pcol->pszAttrName,L"objectClass") == 0 )
{
for (DWORD x = 0; x< pcol->dwNumValues; x++)
{
wcscpy_s(szClass, pcol->pADsValues[x].CaseIgnoreString);
}
}
if (0==wcscmp(L"", szClass))
{
hr = E_FAIL;
}
else
{
//Allocate memory for string.
//Caller must free using CoTaskMemFree.
*ppClass = (OLECHAR *)CoTaskMemAlloc (
sizeof(OLECHAR)*(wcslen(szClass)+1));
if (*ppClass)
{
wcscpy_s(*ppClass, szClass);
hr = S_OK;
}
else
hr=E_FAIL;
}
}
return hr;
}