Delphi-PRAXiS
Seite 2 von 9     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zugriffsverletzung ADSI, so was komisches hab ich noch nie.. (https://www.delphipraxis.net/146499-zugriffsverletzung-adsi-so-komisches-hab-ich-noch-nie.html)

hoika 21. Jan 2010 15:58

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

hänge mal das Projekt wieder komplett an,

wie im 1. Posting.


Heiko

cherry 21. Jan 2010 16:53

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Liste der Anhänge anzeigen (Anzahl: 1)
gesagt getan. :stupid:

hoika 22. Jan 2010 05:30

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
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

cherry 22. Jan 2010 08:46

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

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:

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. 8-)

cherry 25. Jan 2010 16:20

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
@hoika, konntest du evt. schon etwas testen?

cherry 27. Jan 2010 16:13

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
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?

Alter Mann 27. Jan 2010 19:21

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

noch einer, der in TypLib-Falle tapst :wink:

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

cherry 28. Jan 2010 07:19

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
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...??

nahpets 28. Jan 2010 07:43

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

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 :-(

cherry 28. Jan 2010 07:54

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

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:

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:

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:
Delphi-Quellcode:
ShowMessage(EdContainerPath.Text); // <--- ZUGRIFFSVERLETZUNG jetzt hier?
Zitat:

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:
Delphi-Quellcode:
 "txt := '- Benutzer wurde erfolgreich nach "'+EdContainerPath.Text+'" verschoben.' + #13 // <--- ZUGRIFFSVERLETZUNG jetzt weg?
Zitat:

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.
Seite 2 von 9     12 34     Letzte »    

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