Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Frage zu LookupAccountName (https://www.delphipraxis.net/83320-frage-zu-lookupaccountname.html)

Mr_G 30. Dez 2006 23:36


Frage zu LookupAccountName
 
Hallo zusammen!
Ich möchte gerne an die SID des Users kommen, der mein Programm ausführt. Dazu nutze ich LookupAccountName und dabei ist mir etwas seltsames aufgefallen: Nach dem Aufruf der Funktion liefert diese zwar True zurück und enthält die richtigen Werte aber GetLastError gibt nach besagtem Aufruf den Wert 997 ("Overlapped I/O operation is in progress.") zurück. Ich dachte mir spontan, dass es an meinem Code liegt aber dies schein nicht der Fall zu sein, da auch der Code den Luckie in einem Beitrag veröffentlicht hat dieses Verhalten an den Tag legte, jedoch wurde der Wert dort ignoriert da LookupAccountName bereits True zurückgegeben hatte.
Da ich mich mit der Windows API noch nicht so sehr auseinadergestzt habe, lautet meine Frage nun: Wieso liefert GetLastError an dieser Stelle einen Fehler zurück und (viel wichtiger!) warum kann ich das an dieser Stelle ignorieren (Die beschreibung hört sich ja gefährlich an ;) )?

Danke im Voraus
Mr_G

Olli 30. Dez 2006 23:43

Re: Frage zu LookupAccountName
 
In der Native API hieße das nicht "Fehler", sondern "Status". Ist etwas glücklicher gelöst.

Das bedeutet nur, daß asynchron irgendwas entsprechend deiner Anforderung gerade bearbeitet wird. Muß dich aber nicht weiter stören. (Übrigens könnte das durchaus auch schon der Code davor erzeugen. Falls du das testen willst, benutzt du SetLastError zum Zurücksetzen vor einer Funktion ... nur dann bist du sicher, daß es diese Funktion war, die den Wert gesetzt hat!)

Denk mal drüber nach wie sinnlos der Name "ERROR_SUCCESS" ist :stupid:

Mr_G 30. Dez 2006 23:49

Re: Frage zu LookupAccountName
 
Danke für die schnelle Antwort! Das ist ja echt verrückt! :roll:
Merken muss ich mir also für die Zukunft: GetLastError ist für mich nur interessant wenn die Funktion die ich davor aufgerufen habe False (oder etwas vergleichbares) zurückgibt?

Olli 31. Dez 2006 00:14

Re: Frage zu LookupAccountName
 
Zitat:

Zitat von Mr_G
Danke für die schnelle Antwort! Das ist ja echt verrückt! :roll:
Merken muss ich mir also für die Zukunft: GetLastError ist für mich nur interessant wenn die Funktion die ich davor aufgerufen habe False (oder etwas vergleichbares) zurückgibt?

Drück es so aus: wenn sie fehlschlägt. Theoretisch kann es auch was anderes als FALSE sein ... aber prinzipiell hast du natürlich recht ... meistens wird es FALSE sein.

Mr_G 31. Dez 2006 11:41

Re: Frage zu LookupAccountName
 
Wunderbar! Nun hätten wir alle Unklarheiten beseitigt. :???:
Besten Dank nochmal für die schnelle Hilfe!

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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