Recupero dell'attributo objectClass
L'attributo objectClass contiene la classe di cui l'oggetto è un'istanza, nonché tutte le classi da cui deriva tale classe. Ad esempio, la classe utente eredita da top, person e organizationalPerson, pertanto l'attributo objectClass contiene i nomi di tali classi, nonché dall'utente. Quindi, come si scopre quale classe l'oggetto è un'istanza di? L'attributo objectClass è l'unico attributo con più valori ordinati. Il primo valore è la parte superiore della gerarchia di classi, ovvero la classe principale e l'ultimo valore è la classe più derivata, ovvero la classe di cui l'oggetto è un'istanza.
La funzione seguente accetta un puntatore a una colonna contenente un attributo objectClass e restituisce l'oggetto objectClass di cui è stata creata un'istanzaClass .
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;
}