AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADSI-Zugriff führt zu Programmabsturz

Ein Thema von Siggi · begonnen am 5. Mai 2018 · letzter Beitrag vom 6. Mai 2018
 
Siggi

Registriert seit: 19. Jun 2004
Ort: Lollar
52 Beiträge
 
Delphi 11 Alexandria
 
#1

ADSI-Zugriff führt zu Programmabsturz

  Alt 5. Mai 2018, 14:44
Hallo zusammen,

ich stehe gerade völlig auf dem Schlauch und finde den Fehler nicht. Ich versuche in Delphe 2010 mit Hilfe der Unit ADSI (gefunden auf https://stackoverflow.com/questions/...tive-directory) die Gruppenzugehörigkeit des gerade angemeldetn Benutzers zu ermitteln. Der Aufruf von getUser() gibt auch völlig korrekt die Daten zurück. Anschließend führt aber jeder weitere Schritt im Programm zu einer Zugriffsverletzung (readViolation).

Um zu prüfen, ob es an meiner Applikation oder an der Verwendung der ADSI-Unit, habe ich die Unit mal in einem ganz einfachen Programm zum Test eingefügt. Dort tritt der selbe Fehler auf, ist also kein Folgefehler andere in meiner eigentliche Applikation verwendeten Codes sonder liegt nur in einer irgendwie falschen Nutzung der ADSI-Unit.

Zum Test habe ich folgendes Mini-Programm erzeugt:
- neue Dephi VCL-Anwendung
- eine Form mit einem Memo und einem Button
- im Button folgender Code auf dem Click-Event:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  aUser: TADSIUserInfo;
  AD:TADSI;
begin
  ad:=TADSI.Create(self);
  if ad.GetUser('','', aUser) then // hier könnte man auch Domäne und User übergeben, macht aber keinen Unterschied. Mit Leerstrings wird der aktuell angemeldete User verwendet
  begin
    showMessage(aUser.Groups); // --> da stehen die Gruppen korrekt drin
    memo1.Lines.Add(aUser.Groups) // --> das führt zu
  end;
end;
Ich suche jetzt schon Stunden nach dem Fehler (vermutlich irgendein falsch verwendeter Pointer / null-terminiertet String) komme aber nicht weiter.
Sobald in der ADSI-Unit die Code-Zeile zum Aufruf von ADsGetObject ausgeführt wird, tritt an einer nicht vorhersehbaren Stelle im weiteren Verlauf der Applikation eine Zugriffsverltezung auf. Im obigen simplen Beispiel ist es der Zugriff auf das TMemo.

Nachfolgender Code aus ADSI.pas verkürzt auf die relevanten Zeilen, ADsGetObject() steckt in der in Delphi erzeugten ActiveDs_TLB-Unit:

Delphi-Quellcode:
...
type
  TADSIUserInfo = record
    UID: string;
    UserName: string;
    Description: string;
    Password: TPassword;
    Disabled: boolean;
    LockedOut: boolean;
    Groups: string; //CSV
end;

...

function TADSI.GetUser(Domain, UserName: string; var ADSIUser: TADSIUserInfo): boolean;
var
  usr : IAdsUser;
  dom1, uid1: string;

begin
...
  Result:=false;
  uid1:=FCurrentUser
  dom1:=FCurrentDomain
...
  ADsGetObject(PWideChar('WinNT://' + dom1 + '/' + uid1), IADsUser, usr);
...
Hat jemand einen Tipp für mich, wo der Fehler stecken könnte?

Werden weitere Informationen benötigt?

Vielen Dank schon mal
Siggi
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
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