Merkwürdiger Returncode

06/02/2008 - 09:11 von Ferry Bolhar | Report spam
Hallo,

beim Aufruf der OpenServiceA() Funktion mit den Parametern:

status = OpenServiceA(mgrhandle, srvnam, SERVICE_INTERROGATE);

funktioniert alles einwandfrei, wenn das Service, dessen Name
ich in "srvnam" übergebe, existiert. Existiert es aber nicht, liefert ein GetLastError() merkwürdigerweise den Code 997
(ERROR_IO_PENDING) zurück. Ich hàtte eigentlich erwartet, dass
dann 1060 (ERROR_SERVICE_DOES_NOT_EXIST) zurückgegeben wird.

Da ich im Fehlerfall die Meldung mittels FormatMessage() ausgebe,
ist das etwas làstig, denn der Benutzer erhàlt dann den
vielsagenden Hinweis:

"Überlappender E/A-Vorgang wird verarbeitet."

Nicht wirklich informativ. Kann mir jemand verraten, woran das
liegt? Mache ich beim Aufruf etwas falsch? Wie gesagt, wenn das
Service existiert, klappt alles einwandfrei, es geht nur um den
Returncode im Fehlerfall.

Danke für eure Hilfe und schöne Grüße aus Wien,

Ferry

Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: ferdinand.bolhar-nordenkampf@wien.gv.at
 

Lesen sie die antworten

#1 Stefan Graf
07/02/2008 - 19:32 | Warnen spam
beim Aufruf der OpenServiceA() Funktion mit den Parametern:

status = OpenServiceA(mgrhandle, srvnam, SERVICE_INTERROGATE);

funktioniert alles einwandfrei, wenn das Service, dessen Name
ich in "srvnam" übergebe, existiert. Existiert es aber nicht, liefert ein
GetLastError() merkwürdigerweise den Code 997
(ERROR_IO_PENDING) zurück. Ich hàtte eigentlich erwartet, dass
dann 1060 (ERROR_SERVICE_DOES_NOT_EXIST) zurückgegeben wird.

Da ich im Fehlerfall die Meldung mittels FormatMessage() ausgebe,
ist das etwas làstig, denn der Benutzer erhàlt dann den
vielsagenden Hinweis:

"Überlappender E/A-Vorgang wird verarbeitet."

Nicht wirklich informativ. Kann mir jemand verraten, woran das
liegt? Mache ich beim Aufruf etwas falsch? Wie gesagt, wenn das
Service existiert, klappt alles einwandfrei, es geht nur um den
Returncode im Fehlerfall.



Das sagt nur aus, das Windows noch etwas Zeit braucht, um die Verbindung
aufzubauen. Einfach mit WaitForSingleObject auf den Abschluss des Vorgangs
warten.
Dein Problem wird aber sein, dass Du kein Event hast, auf welches Du warten
kannst.
Bist Du sicher, dass da nicht noch was anderes dazwischen hàngt?

Normal ist das verhalten auf jeden Fall nicht.

Stefan Graf

Ähnliche fragen