В C после этой статьи (http://blogs.msdn.com/oldnewthing/archive/2006/12/21/1340571.aspx), мы успешно смогли извлечь информацию о версии файла из файлов Windows, однако есть некоторые файлы, которые, похоже, имеют другой механизм хранения информации о версии, который не является обратился к статье и задавался вопросом, есть ли у кого-нибудь какие-либо идеи здесь.
Одним из примеров файла будет system32 / oledlg.dll. Просматривая файл побайтово, мы попадаем в блок, где ДОЛЖНА храниться информация о версии:
F^@i^@l^@e^@V^@e^@r^@s^@i^@o^@n^@^@^@^@^1.0 (x^@p^@s^@p^@.^@0^@8^@0^@4^@1^@3
^@-^@2^@1^@0^@8^@)^@^@^@^@^@.^@^G^@^A^@I^@n^@t^@e^@r^@n^@a^@l^@N^@a^@m^@e
То, что мы видим, это 1.0. Тем не менее, когда вы смотрите на информацию о файле в Windows, версия на самом деле 5.1.2600.5512. Метод, описанный в статье, работает для большинства файлов, но я сталкивался с несколькими случаями, когда я сталкивался с вышеуказанной проблемой. У кого-нибудь есть опыт с этим? У меня есть доступ только к стандартному C.
На основании последующей статьи, опубликованной в комментарии, означает ли это, что нет способа извлечь фактическую версию файла из файла с поврежденным информационным блоком файла?
Я должен также добавить, что я беру файлы из окна Windows, а затем проверяю их в linux с помощью программы на C для получения информации о файле.