Mit "SHGetFileInfo" kann man problemlos die Symbole sowohl von Dateien als auch von Ordnern ermitteln.
Auch die Symbole von speziellen Ordnern (Eigene Dateien, Favoriten, usw.) kann man so erhalten.
Ansonsten mal zum Nachdenken:
Findest du auf deinem Rechner im Systemordner von Windows eine Datei namens "shell32.dll,3"? Sicher nicht. Die Datei heißt nur "shell32.dll", die Angabe 3 nach dem Komma bezieht sich auf den Index des Icons. Mit einer Funktion wie bspw.
PathParseIconLocation kannst du den Dateinamen quasi filtern.
Aber notwendig ist das alles nicht. Ich persönlich bin der Meinung, dass dein Weg nicht nur umständlich sondern auch ressourcen-vergeudend ist. Mit jeder Datei fügst du deiner Imageliste ein neues Symbol hinzu. Und wie gesagt: Zwei ZIP-Dateien auf dem Server (oder wo auch immer), und deine Imageliste enthält zweimal das gleiche Symbol.
Windows hält bereits eine Liste aller bekannten Icons im Speicher, auf die man zugreifen kann. Wozu die Dinger also noch mal laden?