Einzelnen Beitrag anzeigen

Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Active Directory: Berechtigungen; Untergruppen; LDAP?

  Alt 7. Mai 2010, 16:42
Hallo CTest,

welche Delphi-Version(en) benutzt du?
Ich habe gesehen das das Beispiel unvollständig ist und würde dir die fehlenden
Units als dcu-Datei zukommen lassen.

[Edit 1]
Ansonsten versuche es mal so:
"LDAP://CN=Administrator, CN=Users, DC=jedi,DC=test,DC=de"

Wobei in diesem Fall die Domäne "jedi.test.de" heißt, einfach nur ändern und dann klappt es auch
mit den Active Directory Services Interface.

[/Edit 1]

[Edit 2]
Legt auf das Formular bitte noch eine Listbox und nenne sie 'lboADSI'.

Änder das Beispiel im Posting #3 wie folgt ab:
Delphi-Quellcode:
procedure TForm1.btnGetClick(Sender: TObject);
var
  ADSystemInfo : TADSystemInfo;
  ADsObject : IADs;
  iSecurityDescriptor : IADsSecurityDescriptor;
  iAccessControlList : IADsAccessControlList;
  iAccessControlEntry : IADsAccessControlEntry;
  Enum : IEnumVariant;
  varArr : OleVariant;
  lNumElements : ULONG;
  hr : HRESULT;
begin
  if edtADsPath.Text = 'then
  begin
    ADSystemInfo := TADSystemInfo.Create(Self);
    try
      edtADsPath.Text := 'LDAP://' + ADSystemInfo.UserName;
    finally
      ADSystemInfo.FreeOnRelease;
    end;
  end;

  if SUCCEEDED(ADsGetObject(edtADsPath.Text, IADs, ADsObject)) then
  begin
    if SUCCEEDED(IDispatch(ADsObject.Get('nTSecurityDescriptor')).QueryInterface(IADsSecurityDescriptor, iSecurityDescriptor)) then
    begin
      if SUCCEEDED(IDispatch(iSecurityDescriptor.DiscretionaryAcl).QueryInterface(IADsAccessControlList, iAccessControlList)) then
      begin
        hr := IDispatch(iAccessControlList._NewEnum).QueryInterface(IEnumVariant, Enum);
        while SUCCEEDED(hr) do
        begin
          hr := ADsEnumerateNext(Enum, 1, varArr, lNumElements);
          if (lNumElements <= 0) then Break;
          if SUCCEEDED(IDispatch(varArr).QueryInterface(IADsAccessControlEntry, iAccessControlEntry)) then
          begin
            lboADSI.Items.Add(iAccessControlEntry.Trustee);
          end;
        end;
      end;
    end;
  end;
end;
In edtADsPath.Text trägst du die Zeichenfolgen aus Edit 1 ein und
nun solltest du über iAccessControlEntry alle Werte bekommen die du benötigst.
[/Edit 2]

Viele Grüße
  Mit Zitat antworten Zitat