Получение информации о файле Windows - PullRequest
1 голос
/ 05 мая 2010

В 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 для получения информации о файле.

1 Ответ

0 голосов
/ 06 мая 2010

Оказывается, неверная порция информации для того файла, который использовался для получения версии, на самом деле не нуждался в блоке версии файла, а в блоке VS_VERSION_INFO.

...