Ein SpeedCommander-Anwender setzt die Software Carbonite Backup ein, mit der die zu sichernden Daten über das Internet in ein Backup-Center übertragen werden. Mit Hilfe von Overlay-Symbolen wird der Status gekennzeichnet. Ein grüner Punkt zeigt z.B. an, dass die Datei gesichert wurde. Mit einem gelben Punkt versehene Dateien werden gerade gesichert.
Soweit so gut, doch leider werden die Punkte nur im Explorer angezeigt, in SpeedCommander sind alle Dateien punktlos. Eigentlich gibt es dafür aber keinen Grund, da SpeedCommander die entsprechenden Overlay-Symbole ebenfalls bei der Shell anfragt und dann auch anzeigen sollte.
Im Debugger sah ich dann, dass beim Aufruf von IShellIconOverlay::GetOverlayIndex der Fehlercode E_FAIL zurückgegeben wird. Laut Dokumentation bedeutet dies, dass die übergebene PIDL ungültig ist. Zu erklären ist dies aber nicht, da alle anderen Overlay-Symbole ja korrekt ermittelt werden.
Aus Verzweiflung kam ich auf die dumme Idee, SpeedCommander.exe in Explorer.exe umzubenennen und aufzurufen. Danach sah ich das:
Die Darstellung der Overlay-Symbole von Carbonite Backup funktioniert also wohl nur in Prozessen, die Explorer.exe heißen. Zur Überprüfung habe ich mir dann die Datei CarboniteNSE.dll angeschaut und bin auf folgende hartkodierte Namen gestoßen:
- explorer.exe
- dopus.exe
- pdexplo.exe
- regsvr32.exe
- verclsid.exe
- carboniteui.exe
Ändere ich SpeedCommander.exe in einen dieser Namen, dann werden die Symbole korrekt angezeigt. Bei allen anderen verweigert Carbonite Backup die Anzeige der Symbole und des Kontextmenü-Eintrags.


Wat für ein Müll. Wenn andere Entwickler sowas machen, ists nicht schön…