AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zugriffsverletzung ADSI, so was komisches hab ich noch nie..

Zugriffsverletzung ADSI, so was komisches hab ich noch nie..

Offene Frage von "Dezipaitor"
Ein Thema von cherry · begonnen am 21. Jan 2010 · letzter Beitrag vom 21. Jul 2010
Antwort Antwort
Seite 2 von 9     12 34     Letzte » 
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.713 Beiträge
 
Delphi XE4 Professional
 
#11

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 21. Jan 2010, 15:58
Hallo,

hänge mal das Projekt wieder komplett an,

wie im 1. Posting.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#12

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 21. Jan 2010, 16:53
gesagt getan.
Angehängte Dateien
Dateityp: zip adtest_109.zip (919,5 KB, 8x aufgerufen)
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.713 Beiträge
 
Delphi XE4 Professional
 
#13

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 22. Jan 2010, 05:30
Hallo,

eine Warnung

EExtemporaneousMumblings
Zeile 668 (CallBackFunction)
Variable SD möglicherweise nicht initialisiert

Habe hier kein AD, kann es also nicht testen.

Aber was soll dieses ganze RefCount Zeug ?
Bei jedem Zugriff auf ADsMgr wird der Zähler hochgezählt ?
(Hat aber nichts mit dem Problem zu tun)


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#14

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 22. Jan 2010, 08:46
Zitat von hoika:
EExtemporaneousMumblings
Zeile 668 (CallBackFunction)
Variable SD möglicherweise nicht initialisiert
danke. Aber das hat ja dann wohl auch nichts mit dem Problem zu tun.

Zitat von hoika:
Aber was soll dieses ganze RefCount Zeug ?
Bei jedem Zugriff auf ADsMgr wird der Zähler hochgezählt ?
Hmm... muss ich nochmals überdenken, ich hab da einfach mal was versucht glaube ich. Es ging darum, dass mann das Objekt nicht freigeben kann solange es noch verwendet wird. Aber so funktioniert das sowieso nicht... ist also Schwachsinnig. Aber wie du schon gesagt hast, hat auch das nichts mit dem eigentlichen Problem zu tun.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#15

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 25. Jan 2010, 16:20
@hoika, konntest du evt. schon etwas testen?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#16

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 27. Jan 2010, 16:13
Ich hatte da noch die Vermutung, dass es mit der activeds.dll / .tlb version was zu tun haben könnte?! habe mal alle Windows Updates gemacht, die Datei wurde jedoch nicht aktualisiert. Meine Version: "5.1.2600.5512 (xpsp.080413-2113)"... naja, wieder mal auf dem Holzweg... konnte noch jemand mein Beispiel Testen?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Alter Mann

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

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 27. Jan 2010, 19:21
Hallo,

noch einer, der in TypLib-Falle tapst

Es ist mir schon im April 2009 aufgefallen das einige deklarationen/definitionen nicht MSDN-Komform sind.
Du wirs also nicht umhin kommen es per Hand zu überprüfen.

Für IDirectorySearch sei die die Arbeit abgenommen:
Delphi-Quellcode:
// *********************************************************************//
// Schnittstelle: IDirectorySearch
// Flags: (0)
// GUID: {109BA8EC-92F0-11D0-A790-00C04FD8D5A8}
// *********************************************************************//
  IDirectorySearch = interface(IUnknown)
    ['{109BA8EC-92F0-11D0-A790-00C04FD8D5A8}']
    function SetSearchPreference(var pSearchPrefs: ads_searchpref_info; dwNumPrefs: LongWord): HResult; stdcall;
    function ExecuteSearch(pszSearchFilter: PWideChar; pAttributeNames: PWideChar;
                           dwNumberAttributes: LongWord; out phSearchResult: THandle): HResult; stdcall;
    function AbandonSearch(var phSearchResult: THandle): HResult; stdcall;
    function GetFirstRow(var hSearchResult: THandle): HResult; stdcall;
    function GetNextRow(hSearchResult: THandle): HResult; stdcall;
    function GetPreviousRow(var hSearchResult: THandle): HResult; stdcall;
    function GetNextColumnName(var hSearchHandle: THandle; out ppszColumnName: PWideChar): HResult; stdcall;
    function GetColumn(hSearchResult: THandle; szColumnName: PWideChar;
                       out pSearchColumn: ads_search_column): HResult; stdcall;
    function FreeColumn(var pSearchColumn: ads_search_column): HResult; stdcall;
    function CloseSearchHandle(var hSearchResult: THandle): HResult; stdcall;
  end;
Dann funktioniert auch die Suche (wieder).

Viele Grüße
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#18

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 28. Jan 2010, 07:19
Hallo alter Mann... Erstmal Danke das du dich auch dem Problem angenommen hast...
nur leider ist das nicht mein eigentliches Problem. Ursprünglich ist mein Problem: Unerklärbare Zugriffsverletzungen...

Zum Beispiel endet mein Programm auch nach dieser Methode in einer unerklärbaren Zugriffsverletzung...

Delphi-Quellcode:
function TEADSObject.MoveTo(AdsPathObject, AdsPathNewContainer: string): Boolean;
var
  container: IADsContainer;
  obj: IADs;
  hr: Integer;
  r: Boolean;
begin
  result := true;
  try
    if SUCCEEDED(ADSGetObject(AdsPathObject, IID_IADs, obj)) then
    begin
      if SUCCEEDED(ADSGetObject(AdsPathNewContainer, IID_IADsContainer, container)) then
        container.MoveHere(obj.ADsPath, 'cn='+ExtractValue(obj.ADsPath))
      else
        result := false;
    end
    else
      result := false;
  except
    result := false;
  end;
end;
So wird die Funktion aufgerufen:

Delphi-Quellcode:
...
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, EdContainerPath.Text) then
      txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
Ich geh schon fast wieder die Wände hoch... das Problem besteht schon seit Wochen und ich kriegs einfach nicht raus... !!!
Es scheint, als ob die Function "MoveTo" etwas nicht richtig frei gibt oder so.... ich schnalls nicht... Wo kann das her kommen???

Und gerade Witzig daran ist, der Benutzer wird tatsächlich korrekt verschoben...

Wenn ich die Funktion in einer DUMMY-Funktion aufrufe erhalte ich auch KEINE Zugriffsverletzung...

Delphi-Quellcode:
function TFrameUsers.ChangeAccountName: Boolean;
begin
  result := AdsMgr.ADSUsers.ChangeAccountName(ADSPATH_OF_CURRENT_USER, EdSAMAccountName.Text);
end;
Sowas gibts doch gar nicht?!

Hmmm.....

Hab grad nochmal was rausgekriegt:
Wenn in der Zeile wo die Zugriffsverletzung auftritt nur Text steht, also ohne EdContainerPath.Text... dann gibts dort keine Zugriffsverletzung...
Also scheints fast so, dass die Funktion auf dem Parameter sitzt...

Was muss ich bloss ändern...??
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#19

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 28. Jan 2010, 07:43
Hallo,
Zitat von cherry:
So wird die Funktion aufgerufen:

Delphi-Quellcode:
...
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, EdContainerPath.Text) then
      txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
Ich geh schon fast wieder die Wände hoch... das Problem besteht schon seit Wochen und ich kriegs einfach nicht raus... !!!
Es scheint, als ob die Function "MoveTo" etwas nicht richtig frei gibt oder so.... ich schnalls nicht... Wo kann das her kommen???

Und gerade Witzig daran ist, der Benutzer wird tatsächlich korrekt verschoben...

Wenn ich die Funktion in einer DUMMY-Funktion aufrufe erhalte ich auch KEINE Zugriffsverletzung...

Delphi-Quellcode:
function TFrameUsers.ChangeAccountName: Boolean;
begin
  result := AdsMgr.ADSUsers.ChangeAccountName(ADSPATH_OF_CURRENT_USER, EdSAMAccountName.Text);
end;
Sowas gibts doch gar nicht?!

Hmmm.....

Hab grad nochmal was rausgekriegt:
Wenn in der Zeile wo die Zugriffsverletzung auftritt nur Text steht, also ohne EdContainerPath.Text... dann gibts dort keine Zugriffsverletzung...
Also scheints fast so, dass die Funktion auf dem Parameter sitzt...

Was muss ich bloss ändern...??
meine Vermutung geht dahin, dass MoveTo Dir (wie auch immer) EdContainerPath.Text zerschießt. Die passt ja auch zu den andernorts schon genannten Vermutungen in Bezug auf den Einsatz von Variabeln.

Was passiert denn bei der folgenden Änderung?
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, sContainerPath) then
      txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
und was passiert hier?
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, sContainerPath) then
      txt := '- Benutzer wurde erfolgreich nach "'+sContainerPath+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG nicht weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
und einen hab' ich noch:
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, EdContainerPath.Text) then
      txt := '- Benutzer wurde erfolgreich nach "'+sContainerPath+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
  ShowMessage(EdContainerPath.Text); // <--- ZUGRIFFSVERLETZUNG jetzt hier?
und noch einen:
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, sContainerPath) then
      txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
  ShowMessage(sContainerPath); // <--- ZUGRIFFSVERLETZUNG jetzt hier?
Irgendwie meine ich mich daran erinnern zu können, dass auf Variabeln, die im Zusammenhang mit ADSObject benutzt wurden, nachher nicht mehr zugegriffen werden konnten, ohne auf eine Zugriffsverletzung zu stoßen.
Da war mal in irgendeinem meiner Programme mal was, aber da komme ich nicht mehr an die Sourcen
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#20

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n

  Alt 28. Jan 2010, 07:54
Zitat von nahpets:
...

Was passiert denn bei der folgenden Änderung?
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, sContainerPath) then
      txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
Zugriffsverletzung!

Zitat von nahpets:
...

und was passiert hier?
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, sContainerPath) then
      txt := '- Benutzer wurde erfolgreich nach "'+sContainerPath+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG nicht weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
KEINE Zugriffsverletung!!!

Zitat von nahpets:
...und einen hab' ich noch:
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, EdContainerPath.Text) then
      txt := '- Benutzer wurde erfolgreich nach "'+sContainerPath+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
  ShowMessage(EdContainerPath.Text); // <--- ZUGRIFFSVERLETZUNG jetzt hier?
Richtig "geraten" !!! Zugriffsverletung in dieser Zeile: ShowMessage(EdContainerPath.Text); // <--- ZUGRIFFSVERLETZUNG jetzt hier?
Zitat von nahpets:
und noch einen:
Delphi-Quellcode:
Var
    sContainerPath : String;
...
  sContainerPath := EdContainerPath.Text;
if AdsMgr.ADSObject.MoveTo(ADSPATH_OF_CURRENT_USER, sContainerPath) then
      txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
    else
      txt := '<!> Benutzer konnte nicht verschoben werden <!>' + #13;
...
  ShowMessage(sContainerPath); // <--- ZUGRIFFSVERLETZUNG jetzt hier?
Zugriffsverletung in dieser Zeile:  "txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
Zitat von nahpets:
Irgendwie meine ich mich daran erinnern zu können, dass auf Variabeln, die im Zusammenhang mit ADSObject benutzt wurden, nachher nicht mehr zugegriffen werden konnten, ohne auf eine Zugriffsverletzung zu stoßen.
Da war mal in irgendeinem meiner Programme mal was, aber da komme ich nicht mehr an die Sourcen
Hmm du scheinst irgendwie recht zu haben... konnstest du damals das Problem lösen?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf