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