Freigeben über


Verzeichnisobjektauswahl

Das Dialogfeld Verzeichnisobjektauswahl ermöglicht es einem Benutzer, ein oder mehrere Objekte aus dem globalen Katalog, einer Domäne oder einem Computer oder einer Arbeitsgruppe auszuwählen. Die Objekttypen, aus denen ein Benutzer auswählen kann, umfassen Benutzer-, Kontakt-, Gruppen- und Computerobjekte. Weitere Informationen zu Active Directory Domain Services finden Sie unter Active Directory Domain Services.

So zeigen Sie ein Dialogfeld für die Objektauswahl an:

  1. Rufen Sie die Funktion CoCreateInstance oder CoCreateInstanceEx auf, um eine instance der IDsObjectPicker-Schnittstelle zu erstellen.
  2. Rufen Sie die IDsObjectPicker::Initialize-Methode auf, um das Dialogfeld zu initialisieren.
  3. Rufen Sie die IDsObjectPicker::InvokeDialog-Methode auf, um das Dialogfeld anzuzeigen.
  4. Rufen Sie die IDataObject::GetData-Methode der vom Dialogfeld Objektauswahl zurückgegebenen IDataObject-instance auf, um die CFSTR_DSOP_DS_SELECTION_LIST Daten abzurufen. Das CFSTR_DSOP_DS_SELECTION_LIST Zwischenablageformat stellt eine HGLOBAL-Datei bereit, die eine DS_SELECTION_LIST-Struktur enthält. Die DS_SELECTION_LIST-Struktur enthält Daten zu den elementen, die im Dialogfeld Objektauswahl ausgewählt sind.

Wenn der Sicherheitsbezeichner (SECURITY Identifier, SID) für ein Objekt erforderlich ist, sollte dies direkt von der Objektauswahl angefordert werden, indem das objectSID-Attribut der Liste der Attribute hinzugefügt wird, die für das ausgewählte Objekt abgerufen werden sollen. Das Übergeben des zurückgegebenen Objektnamens an die Funktion LsaLookupNames oder LookupAccountName wird nicht empfohlen, da die Namenssuche redundant ist und in einigen Fällen fehlschlägt.

Wenn ein Verweis auf ausgewählte Objekte gespeichert wird, sollte der distinguished Name nicht gespeichert werden, da sich das Objekt möglicherweise verschieben, umbenannt oder aufgrund von Gebietsschemaunterschieden geändert werden kann. Bei Sicherheitsprinzipalen sollte die objectSID für das Objekt angefordert und sicher gespeichert werden. Wenn der Name des Sicherheitsprinzipals später benötigt wird, kann er mit der Funktion LookupAccountSid abgerufen werden. Für alle anderen Objekte sollte die objectGUID angefordert und gespeichert werden.

Initialisierung

Wenn das Dialogfeld objektauswahl initialisiert wird, wird eine Reihe von Bereichstypen und Filtern angegeben. Die angegebenen Bereichstypen bestimmen beispielsweise die Speicherorte, Domänen oder Computer, von denen ein Benutzer Objekte auswählen kann. Die Filter bestimmen die Objekttypen, die ein Benutzer aus einem bestimmten Bereichstyp auswählen kann. Weitere Informationen finden Sie weiter unten im Abschnitt Bereiche und Filter.

Standardmäßig kann ein Benutzer ein einzelnes Objekt im Dialogfeld Verzeichnisobjektauswahl auswählen. Um mehrere Auswahlmöglichkeiten zu aktivieren, legen Sie das DSOP_FLAG_MULTISELECT-Flag im flOptions-Element der DSOP_INIT_INFO-Struktur fest, wenn das Dialogfeld initialisiert wurde.

Bereiche und Filter

Die Dropdownliste Suchen in enthält die Bereiche, aus denen ein Benutzer Objekte auswählen kann. Ein Bereich ist eine Domäne, ein Computer, eine Arbeitsgruppe oder ein globaler Katalog, in dem Daten zu einer Reihe verfügbarer Objekte gespeichert und Zugriff auf eine Reihe verfügbarer Objekte bereitgestellt werden. Die Einträge in der Bereichsliste hängen von den Bereichstypen und dem Zielcomputer ab, der beim letzten Aufruf der IDsObjectPicker::Initialize-Methode angegeben wurde, um das Dialogfeld objektauswahl zu initialisieren.

Ein Bereichstyp ist eine generische Kategorie von Bereichen, z. B. alle Domänen in dem Unternehmen, zu dem der Zielcomputer gehört, oder der globale Katalog für das Unternehmen des Zielcomputers oder den Zielcomputer selbst. Für jeden angegebenen Bereichstyp verwendet das Dialogfeld den Kontext des Zielcomputers, um die Bereichslisteneinträge zu bestimmen.

Die IDsObjectPicker::Initialize-Methode verwendet einen Zeiger auf eine DSOP_INIT_INFO-Struktur , die ein Array von DSOP_SCOPE_INIT_INFO Strukturen enthält. Jeder Eintrag im DSOP_SCOPE_INIT_INFO Arrays gibt mindestens einen Bereichstyp sowie anwendbare Filter und andere Attribute an. Die Filter bestimmen die Objekttypen, z. B. Benutzer, Gruppen, Kontakte und Computer, die der Benutzer aus einem bestimmten Bereichstyp auswählen kann. Wenn der Benutzer einen Bereich aus der Liste auswählt, wendet das Dialogfeld die Filter für diesen Bereichstyp an, um eine Liste von Objekten anzuzeigen, aus denen der Benutzer auswählen kann.

Jede DSOP_SCOPE_INIT_INFO-Struktur enthält eine DSOP_FILTER_FLAGS-Struktur , die die Filter für diesen Bereichstyp angibt. Die DSOP_FILTER_FLAGS-Struktur unterscheidet zwischen Bereichen auf der up- und down-Ebene:

  • Ein Bereich der obersten Ebene ist ein globaler Katalog oder eine Domäne, die den ADSI-LDAP-Anbieter unterstützt.
  • Ein untergeordneter Bereich umfasst Arbeitsgruppen und alle einzelnen Computer. Im Dialogfeld wird der ADSI WinNT-Anbieter verwendet, um auf einen Bereich auf untergeordneter Ebene zuzugreifen.

Es gibt zwei Sätze von Filterflags, die für die Verwendung in der DSOP_FILTER_FLAGS-Struktur definiert sind: einen für Bereiche auf der obersten Ebene und einen für Bereiche auf der untergeordneten Ebene. Das Uplevel-Element der DSOP_FILTER_FLAGS-Struktur ist eine DSOP_UPLEVEL_FILTER_FLAGS-Struktur , die die Filter für übergeordnete Bereiche angibt. Das flDownlevel-Element der DSOP_FILTER_FLAGS-Struktur ist eine Gruppe von Flags, die die Filter für untergeordnete Bereiche angeben.