Entwickler-Ecke

Dateizugriff - DLL Version aus Stream


Klabautermann - Mo 27.06.11 16:19
Titel: DLL Version aus Stream
Hallo,

ich habe einige ZIP Dateien, welche DLLs enthalten. Jetzt möchte ich, ohne die DLLs auf der Festplatte abzulegen, herausfinden welche Dateiversion diese DLLs haben.

Wenn ich die Dateien auf der Platte hätte, könnte ich mit einer Kombination aus GetFileVersionInfo und VerQueryValue arbeiten. Da ich aber die Dateien direkt in einen (Memory)Stream entpacken lasse, klappt es so nicht. Habt ihr eine Idee, wie ich an die Informationen komme ohne Temporäre Dateien anlegen zu müssen?

Gruß
Klabautermann


jaenicke - Mo 27.06.11 17:01

AFAIK bietet die Windows API dafür keine Funktionalität. Sonst würde MS selbst das vermutlich auch in Zip-Ordnern nutzen. ;-)

Insofern bleibt dir nur, dass du das PE-Format selbst auseinander nimmst. ;-)


BenBE - Mo 27.06.11 22:00

Wenn ich das grad richtig in Erinnerung habe, waren die Versions-Informationen ein spezieller Resourcen-Typ, den man abfragen konnte. Du könntest also die DLL aus dem Memory-Stream via LoaDLibraryEx als Datenbereich mappen lassen (dabei wird DllMain der DLL nicht ausgeführt) und dann über das erhaltene Handle die Versions-Resource abfragen. Wenn die genannten APIs von Windows ein Module-Handle akzeptieren, könntest Du hier das von LoadLibraryEx gelieferte verwenden. Ansonsten über einen TResourceStream die binäre Versionsinformation extrahieren und parsen. So viel Erleichterung bringt das LoadLibraryEx gegenüber dem Parsen der PE-Header zwar nicht, ABER man hat durch den TResourceStream gleich die korrekte Lokalisation der Versionsresource.


Klabautermann - Mi 29.06.11 12:25

Hallo,

danke für die Antworten. Das war zwar nicht unbedingt das was ich hören wollte, aber wirklich überrascht hat es mich auch nicht ;).

Danke Jungs,
Klabautermann