„beschädigt“ bedeutet in diesem Fall, dass das Dateisystem an der Stelle beschädigt war (die Platte war beim Schreiben einer komprimierten Datei vollgelaufen) und dass die Datei dadurch unlesbar wurde. Win32 hat sie mich zwar mappen lassen, aber beim Zugriff auf die 2. Page (Byte 4096 und folgende) wurde eine In Page Error-Ausnahme ausgelöst. Die habe ich nicht abgefangen, und damit den Explorer zum Absturz gebracht.
Ich weiß nicht so recht, wie ich damit umgehen soll.
- Pro nichts zu tun: Dateisystemfehler liegen ganz klar außerhalb meiner Zuständigkeit. Mein Thumbnail Handler ist in keiner Weise qualifiziert, da irgendwas tun zu können. Ich bin nicht einmal vorbereitet, den Speicher vernünftig freizugeben – sobald Win32 die Datei mit allen Rechten erfolgreich gemappt hat, darf ich davon ausgehen, sie auch lesen zu können.
Selbst wenn ich den Fehler in einen Rückgabewert für den Explorer übersetzen würde, würde der ihn einfach verschlucken, statt ihn dem User anzuzeigen. - Pro doch was tun: Es ist dem User fast unmöglich, die Ursache des Absturzes zu finden: Öffnet er den Ordner, wird mein Thumbnail Handler aufgerufen -> der Explorer stürzt ab. Sucht er nach der Datei oder nach verwandten Dateien, wird mein Thumbnail Handler aufgerufen -> Explorer stürzt ab. Klickt er auf die Datei, oder ruft ihre Eigenschaften auf -> Explorer weg.
Verbietet COM mir nicht auch, Ausnahmen über Schnittstellen hinweg zu schmeißen? Eigentlich müsste jede meiner Methoden in einem __try-__except()-Block stecken. Dann könnte der User zumindest weiter mit dem Explorer in den Ordnern/auf dem Volume arbeiten.
Zu raffen, dass das Dateisystem kaputt ist und CHKDSK auf dem Volume ausgeführt werden muss, ist dann aber nochmal was anderes.