Tumblelog by Soup.io
Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.
char
10:53

Fefes Blog: Win32-API ShellExecuteEx() ist viel zu umfangreich für mein Anliegen


Fefe, Thu Jun 24 2010:

Mal was technisches zum Lachen. Erst eine Weisheit, dann was zum Lachen. Hier ist die Weisheit. Ein gutes API ist eines, bei dem es schwerer ist, es falsch zu benutzen, als es richtig zu benutzen. Wenn man sich verrenken muß, um das API etwas unsicheres tun zu lassen, dann ist das API gut.

Jetzt das zum Lachen. Windows. Nein, das war es noch nicht :-) Wenn man unter Windows eine URL hat, und die im Browser öffnen will. Dann gibt es da keine gute Funktion für. Der übliche Weg ist, dass man ShellExecute benutzt, aber ShellExecute ist eben eigentlich für was anderes gedacht. Insbesondere kann man dem auch einen lokalen Pfad geben oder sowas wie "\\evil.com\0day\trojaner.exe", und ShellExecute würde sich das dann per SMB holen und ausführen.

Gut, bei Microsoft ist sowas immerhin dokumentiert. Für Dokumentation geht man zu MSDN. MSDN hat Dokumentation bei ShellExecuteEx, wie man damit sicher eine URL öffnen kann. Guckt euch mal an, wieviel Code man dafür braucht!

Mal was bzgl. Fefe zum bloßstellen. Erst eine Weisheit, dann was zum Lachen. Hier ist die Weisheit: Eine gute API ist eine, bei der man spezifischer sein Anliegen umsetzen kann als eine, die nur generische Funktionen hat. Wenn ich selbst keine Lösung finden muss, weil die API auch Spezialwünsche abdeckt, dann ist sie gut.

Jetzt das zum Lachen. Windows-Basher. Nein, das war es noch nicht :-) Fefe meint, ShellExecute eigne sich nicht für URLs, weil man auch sowas wie "\\evil.com\0day\trojaner.exe" übergeben könnte. Ein ähnlicher Vergleich wäre: die Adressleiste von Internet-Browsern eigne sich nicht für URLs, weil man auch sowas wie "javascript:alert('nerv');" oder "file:///C:/Windows/system32/drivers/etc/hosts" eingeben kann.

Dass ich trotz großer Parameterauswahl bei ShellExecute() oder Konstrukt bei ShellExecuteEx() exakt das bekomme, was ich mache zählt wohl nicht. Die Funktion kann mir nicht das denken abnehmen. Soll sie auch gar nicht. Vielleicht will ich wirklich eine EXE ausführen. Oder ein Dokument. Oder eben eine URL - die eigentlich immer mit einem Protokoll beginnt und so zwangsläufig den damit assoziierten User Agent startet.

Setzen, Felix :-(

Don't be the product, buy the product!

Schweinderl