MSDN URLDownloadToCacheFile() Doku Mängel

So, hab mich gerade was mit URLDownloadToCacheFile() herumgeärgert. Laut MSDN gibt die Funktion S_OK, E_FAIL oder E_OUTOFMEMORY zurück. Nur blöd, wenn die Funktion dann -2146697211 zurückgibt. Das entspricht 0x800C0005L und nach ein bisschen googeln gehört der Wert zur Konstante INET_E_RESOURCE_NOT_FOUND. Das ist auch richtig, ich Depp hab versucht eine nicht existente Datei herunterzuladen (anderes System, anderer Pfad...). Nur blöd dass MS das nicht in der Funktionsreferenz nicht erwähnt...

Also, wenn ihr die Funktion verwendet, schaut in die urlmon.h und stellt euch drauf ein, das auch die anderen Fehler vorkommen können..

Wenn Windows unter der Last seiner Patches zusammenbricht

Gestern wollt ich auf der Arbeit unseren schändlich vernachlässigten Windows 2003 Small Business Sever updaten, der gefährlicherweise auch noch direkt am Internet hängt (ich hab´s nicht eingerichtet!). Kam nur leider immer eine Fehlermeldung

Die Integrität der Datei update.inf konnte nicht verifiziert werden. Stellen Sie sicher dass der der Kryptographiedienst auf den Cemputer ausgeführt wird.

Anleitungen im Netz gab´s zu hauf, das meiste war nur mehr oder weniger eine Kopie von "benenn das %systemroot%\system32\CatRoot2 um und versuch´s nochmal". Hat leider nicht geholfen. Microsoft kennt das Problem anscheinend auch und nennt direkt einen Haufen Ursachen und zehn(!) Möglichkeiten das Problem zu beheben. Hat nur leider alles nicht geholfen. In den Logs vom Cryptsvc hat er immer bemängelt, das er das Zertifikat einer oem0.cat nicht importieren konnte, nur blöd, das es die Datei gar nicht gab. Geholfen hat dann dieser Blog-Eintrag, der zwar auf einen MicroShit KB Eintrag mit der Ursache des Problems This problem occurs because the number of update packages reaches an architectural limitation in the Windows security database. hinweist, welcher aber keine (der Vorschlag da ist ein Scherz!) Lösung bietet. Die Lösung in dem Blog Eintrag ist richtig. Kryptographiedienste beenden, die genannten Dateien löschen, Kryptographiedienste starten. Glücklich sein. Könnte evt. auch unter Windows XP funktionieren. Ich find´s halt nur mal wieder toll, was Microsoft da gebastelt hat, anscheinend haben die nie mit einer größeren Anzahl von Patches (der Blog redet von einer "very large number (>100)") brauchen würden. Das Service Pack 2 hätte diesen Zähler zwar wieder runtergesetzt, aber irgendwie wurde das nicht über Automatische Updates installiert und irgendwann lief der Zähler dann über. Dumm gelaufen...

Internet Explorer: Wenn ein Download ein Upload ist

-9% wurden heruntergeladen

Hm, wenn der Internet Explorer mir sagt er hätte -9% heruntergeladen, hat er dann 9% hochgeladen? Oder war eine Firma nur zu blöde, es mal in Betracht zu ziehen, das es mal Downloads größer als 2GB(=32bit signed int) geben könnte? (Vielleicht ist das ja ganz normal beim IE, aber da ich seit 7 Jahren keinen IE mehr verwende, bin ich noch nie über diesen Bug gestolpert)

Nachlese: Kleiner C++-IDE Vergleichstest

Nach dem ich jetzt einige Monate lang nicht mehr richtig zum programmieren gekommen bin, konnte ich in den Weihnachtsferien endlich mal wieder was basteln und hab nichtmal annähernd das geschafft, was ich mir vorgenommen hatte. Warum? Hab mich mal wieder mehr mit den Tools herumschlagen müssen.
Da dieser Test die meisten Leute auf die Seite gelockt hat, hier mal ein kleines Update.

Visual Studio

Ich hab mir zum Glück in den letzten Wochen meines Studentenlebens noch Visual Studio Academic Edition zugelegt. Für 60€ ok, sofern man die Bezugsberechtigung hat.
Die Entwicklungsumgebung ist leider noch immer so schrottig wie zuvor. Die Syntaxhervorhebung ist sehr minimalistisch. Die automatische Codeformatierung kann man nicht konfigurieren (M$ hat halt seine Vorstellung von Codeformatierung). Der Compiler lässt einiges durchgehen, was der GCC nicht durchgehen lässt. Der gemeldete Bug in AnkhSVN ist immer noch da, aber das ist nur ein kleines Ärgernis. Einen Profiler gibt´s nur in den extra teuren Visual Studio Versionen. Ohne Linux und Valgrind hätte ich noch immer einige üble Heap Corruptions drin...

Eclipse+CDT

Eclipse ist toll. CDT ist toll. Gibt´s für Linux und Windows und unterstützt GCC. Und das alles für lau. Verglichen mit Visual Studio ist Eclipse zwar subjektiv hässlich, aber es ist einfach komfortabel zu benutzen. Die Codeformatierung ist gut, die Syntaxhervorhebung auch, Subversion ist gut integriert, der Debugger zeigt auch alles Wichtige an. Wenn er nur laufen würde. Entweder ignoriert er Breakpoints total, oder er springt an ganze andere Adressen oder an Code, der gar nicht von mir ist und wo ich gar nicht weiss, wo der herkommt, während er in einer Endlosschleife hängt und wiederholt endlos eine Fehlermeldung zu der es nur Berichte aber keine Lösungen gibt. Ich hab auch mal versucht Cygwin statt MinGW zu benutzen, aber gebracht hat das auch nix. Wieviel Zeit bei dem rumprobieren drauf gegangen ist :(

Code::Blocks

Code::Blocks hat mir damals schon recht gut gefallen aber ohne integrierte CVS oder SVN unterstützung uninteressant. Aber hey, da im Forum wird ja ein neues Plugin entwickelt, probieren wir das doch aus. Naja, nach zig Stunden kompilierens und ausprobieren hab ich es dann doch wieder aufgegeben. Naja, steht ja auch dabei, das es in einer frühen Entwicklungsphase ist. Ok. schauen wir "später" noch mal rein...

Eclipse+CDT Reprise

Das Ding muss doch laufen. Hm, will nicht, verdammt :( . Hab aber im Netz einige Links gefunden, dass wohl GDB wohl so einige Probleme mit C++ und Breakpoints haben. Leider hab ich die Berichte nicht gebookmarked :( (vielleicht der hier? oder der hier?). Nun ja, mit GDB debuggen geht wohl nicht so richtig und CDT unterstützt momentan wohl nur GDB, oder zumindestens hab ich keinen anderen unterstützten Debugger gefunden. Leider brauch ich den Debugger, so das ich CDT wohl nicht nutzen kann, schade, das Ding ist einfach bequem. Es gibt noch einen kleinen Bug, wenn man paralleles kompilieren möchte, dann baut der alles neu, aber das sollte ja nicht das Problem sein.

Visual Studio

Tja, und so häng ich mal wieder bei Visual C++. Es läuft wenigsten. Der Debugger läuft wenigstens. Das ist wichtig. Auch wenn es sich in UltraEdit bequemer editieren lässt als in Visual Studio, eine vollständige IDE ist immer noch wichtiger. Mal schauen wie es mit den nächsten CDT/GDB Versionen aussieht Eine kleine Sache sollte noch erwähnt werden, wenn man sich unter anderem den "rohen" Heap angucken will, dann muss man in den allgemeinen Optionen von Visual Studio unter Debuggen->Allgemein die Option "Debuggen auf Adressebene aktivieren" aktivieren, weil ansonsten kann man die Fenster "Arbeitsspeicher" gar nicht erst aufrufen, was ziemlich blöd ist, wenn man sich mal im Speicher einen Problembereich anschauen möchte, was sehr nützlich ist, wenn man mit Pointern auf "rohem" Speicher herumhantieren muss. Also bleibt´s erstmal wieder bei Visual Studio :(

Internet Explorer: Nicht verschwundene Server

Zeile 13: Fehler: Der Aufgerufene [Server [nicht die Server-Anwendung]] ist nicht verfügbar und nicht verschwunden. Alle Verbindungen sind ungültig. Der Aufruf wurde nicht ausgeführt.

Ein echter Klassiker. Das Bild ist schon ein paar Jahre alt und immer noch aktuell. Was will uns Microsoft mit dieser Meldung sagen? Ich weiss es nicht. Anscheinend ist der Server zwar nicht verfügbar, aber immerhin ist er nicht verschwunden, auch wenn ich jetzt nicht weiß, was mir dieser subtile Unterschied bringt. Aber anscheinend ist die Server-Anwendung davon nicht betroffen, obwohl Server-Anwendungen zumeist auf nicht verschwundenen aber dafür verfügbaren Servern laufen. Andererseits ist mir die Meldung auch schnuppe, denn ausser auf der Arbeit nutze ich nur Opera als Browser und hab daher mit dieser Meldung nix am Hut. Evil Azrael empfiehlt Opera für das schönste Surf-Vergnügen.

Hilfreiche Fehlermeldungen: Explorer

Die Konfigurationsinformationen konnten vom Domänencontroller nicht gelesen werde. Mit dem Computer kann keine Verbindung hergestellt werden, oder der Zugriff wurde verweigert.

Diese Fehlermeldung vom Windows Explorer ist mal wieder äusserst hilfreich, denn ich habe gar keine Domäne, sondern arbeite noch mit einer Workgroup und habe folglich auch keinen Domänencontroller, von dem man Informationen laden könnte, was leicht verwirrend ist. Ursache des Problems und der Fehlermeldung war das ein Freund hier sein Notebooks ins Netz einstöpselte und leider die gleiche IP verwendete wie mein Server und die IP wegen der Kollision gesperrt wurde. Aber warum muss M$ da von einem Domänencontroller labern?