Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Active Directory GruppenID (https://www.delphipraxis.net/104438-active-directory-gruppenid.html)

marabu 4. Dez 2007 18:27

Re: Active Directory GruppenID
 
ADsPath ist eindeutig, aber variabel - da hast du Recht. Momentan gehe ich nach dem Studium der verfügbaren Dokumentation zu IADs immer noch davon aus, dass die property GUID deine Anforderungen erfüllen sollte.

Wie sieht dein Code aus, der stets die GUID des Interface liefert?
Hast du das Beispiel aus Beitrag #6 mal adaptiert?
Um an die GUID zu gelangen kannst du auch das Basis-Interface IADs verwenden.

Um selbst einen Test zu machen benötige ich etwas Zeit (VPN-Tunnel einrichten, Credentials besorgen, ...), aber vielleicht kriegen wir das Problem ja durch Sichtung deines Codes hin.

cst_07 5. Dez 2007 07:58

Re: Active Directory GruppenID
 
Das Beispiel aus #6 hatte ich probiert, hat aber nicht so richtig hingenauen.

Nun der Code zum Auslesen der Gruppeninformationen:

Delphi-Quellcode:
procedure TfrmInfo.ShowGroupInfo;
var
  grp : IAdsGroup;
begin
  if UseOpenObject then
    ADsOpenObject('WinNT://' + Domain + '/' + tvAD.Selected.Text, UserName, Password, 1, IADsGroup, grp)
  else
    ADsGetObject('WinNT://' + Domain + '/' + tvAD.Selected.Text, IADsGroup, grp);
  Assert(grp <> nil);
  edtGroupname.Text := grp.Name;          // Gruppen Name
  edtDescription.Text := grp.Description; // Gruppen Beschreibung

  grp.GUID; // GUID des Interface (immer gleich)
             // GUID immer {27636B00-410F-11CF-B1FF-02608C9E7553}                                       
end;

Die dazugehörige Typlibaryinfo (vielleicht hilft das ja):
Delphi-Quellcode:
// *********************************************************************//
// Interface: IADsGroup
// Flags:    (4416) Dual OleAutomation Dispatchable
// GUID:     {27636B00-410F-11CF-B1FF-02608C9E7553}
// *********************************************************************//
  IADsGroup = interface(IADs)
    ['{27636B00-410F-11CF-B1FF-02608C9E7553}']
    function Get_Description: WideString; safecall;
    procedure Set_Description(const retval: WideString); safecall;
    function Members: IADsMembers; safecall;
    function IsMember(const bstrMember: WideString): WordBool; safecall;
    procedure Add(const bstrNewItem: WideString); safecall;
    procedure Remove(const bstrItemToBeRemoved: WideString); safecall;
    property Description: WideString read Get_Description write Set_Description;
  end;

cst_07 5. Dez 2007 14:27

Re: Active Directory GruppenID
 
Habe mich mal auf den MSDN Seiten genauer umgeschaut und bin auf folgende Info gestoßen.
Die GruppenID lässt sich bei "Globalen Gruppen" (Netapi32.dll) problemlos auslesen, aber bei "Lokalen Gruppen" nicht. :wall:

GROUP_INFO_2 Structure
The GROUP_INFO_2 structure contains information about a global group, including name, identifier, and resource attributes.
Delphi-Quellcode:
typedef struct _GROUP_INFO_2 { 
  LPWSTR grpi2_name;
  LPWSTR grpi2_comment;
  DWORD grpi2_group_id;
  DWORD grpi2_attributes;
} GROUP_INFO_2, *PGROUP_INFO_2;
LOCALGROUP_INFO_1 Structure
The LOCALGROUP_INFO_1 structure contains a local group name and a comment describing the local group.
Delphi-Quellcode:
typedef struct _LOCALGROUP_INFO_1 { 
  LPWSTR lgrpi1_name;
  LPWSTR lgrpi1_comment;
} LOCALGROUP_INFO_1,
  *PLOCALGROUP_INFO_1,
  *LPLOCALGROUP_INFO_1;
Was haben sich die MS-Entwickler bei der localgrup-definition gedacht? :gruebel:
Kaum zu glauben, wieso es hier keine ID gibt :roll:

:?: Gibt es noch eine andere Möglichkeit?? :?:

Alter Mann 5. Dez 2007 19:28

Re: Active Directory GruppenID
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ActiveDirectoryServices oder lokale Gruppen?

Folgende Aussagen beziehen sich auf LDAP://.

Da ich nicht weiß welche Möglichkeiten du hast: Du musst nach den Eigenschaften(Properties) des ADsObjects
schauen, sehr hilfreich (aber auch gefährlich) ADSIEdit.

Die in diesem Fall wichtigen Eigenschaften sind objectGIUD und primaryGroupToken bzw.
auf Mitgliedsseite primaryGroupID. (siehe Anhang)

Der Zugriff erfolgt je nach Vorgehensweise entweder über IADs direkt oder aber
über IADs->(IADS.get_schema)->IDAsClass.OptionalProperties und/oder über
IID_IDirectoryObject.GetObjectAttributes.

Welches der richtige Weg ist, weiß ich auch nicht genau, aber zum Ziel führen sie alle.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz