Abrufen des objectClass-Attributs

Das objectClass-Attribut enthält die Klasse, von der das Objekt ein instance ist, sowie alle Klassen, von denen diese Klasse abgeleitet ist. Beispielsweise erbt die Benutzerklasse von top, person und organizationalPerson; Daher enthält das objectClass-Attribut die Namen dieser Klassen sowie den Benutzer. Wie können Sie also herausfinden, welche Klasse das Objekt instance ist? Das objectClass-Attribut ist das einzige Attribut mit mehreren Werten, das geordnete Werte aufweist. Der erste Wert ist der oberste Wert der Klassenhierarchie, wobei es sich um die oberste Klasse handelt, und der letzte Wert ist die am häufigsten abgeleitete Klasse, d. h. die Klasse, von der das Objekt instance ist.

Die folgende Funktion verwendet einen Zeiger auf eine Spalte, die ein objectClass-Attribut enthält, und gibt die instanziierte objectClass des -Objekts zurück.

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;
}