php pe文件版本号,小悠PE文件FileVersionInfo类,轻松获取PE文件版本信息

本文出自悠然品鉴小悠,转载请注明出处:http://www.youranshare.com/codeorg/sid/138.html

72c063e9cc723e26686b04497919617b.png

今天在整一个类似于windows任务管理器的东西,其中一个功能就是需要获取到exe,dll这些PE文件的版本信息和描述信息,小悠整了老半天终于还是整出来了,为了以后使用放便,我就做成了一个类给封装了起来,这里给大家分享一下吧.

我封装的这个类叫做CPEFileVersionInfoHelper,这里我说明一下这个类的核心实际上是封装了GetFileVersionInfoSizeA、GetFileVersionInfoA和VerQueryValueA这三个函数,具体这三个函数是干嘛的有兴趣的同学可以去MSDN看一下,小悠这里就不在多说了,下面我将会说明我封装的这个类的用法:

如下图所示,是类CPEFileVersionInfoHelper类的定义:

4bbce4ebff960c4d95ef4163b4ba90f9.png

其中函数GetPEFileVersionInfo是类的接口,你只需要传入对应的PE文件的位置和用于接收PE文件Version信息的PEFILEVERSION_INFO (这货是我定义的一个std::map)就能获取到你想要的PE文件的Version信息.

定义了4种状态返回值,作为函数GetPEFileVersionInfo的返回值.#define READ_SUCCESS        0x00//获取成功

#define READ_ERROR            0x01//获取失败

#define READ_INVALID_INIT 0x02//错误的初始化导致的,失败

#define READ_HEAP_REEO   0x03//内部的new操作挂掉导致的

一个PE文件的Version信息有很多种,我列出了所有的类型//需要获取的PE信息

#define Comments                     "Comments"

#define CompanyName                    "CompanyName"

#define FileDescription              "FileDescription"

#define FileVersion                     "FileVersion"

#define InternalName          "InternalName"

#define LegalCopyright             "LegalCopyright"

#define LegalTrademarks          "LegalTrademarks"

#define OriginalFilename    "OriginalFilename"

#define PrivateBuild             "PrivateBuild"

#define ProductName                "ProductName"

#define ProductVersion             "ProductVersion"

#define SpecialBuild            "SpecialBuild"

定义了用于保存PE 文件Version信息的map,其中map的key表示Version信息的索引,例如: map[“FileDescription”] 存放了描述信息.

8941d9ddef5ddfe83f9e11a1469347dc.png

定义一个宏用于添加map的key值,你需要获取什么Version信息你就调用这个宏添加,例如       P_B(peinfo,FileDescription);  P_B(peinfo,FileVersion);表示你要查询 “FileDescription”和”FileVersion “ 查询的结果将会放到peinfo中去

afbcd7beeecdde35f4758e88a6ae105c.png

还有一个定义,就是一下子添加所有的查询= =

52ce0c85843a5f917522d9b5f3f3bf23.png

下面我将演示一下如何使用这个类:

①我想获取到C:\Windows\System32\calc.exe这个文件的所有信息:

执行上面的代码我们可以得到下面的结果:

0f662d11e507746d66610072751e43a5.png

②我想获取C:\Windows\System32\regedt32.exe这个文件的部分信息.

10853b9c579574cbc31b1f793083812e.png

运行上面的代码可以得到下面的结果:

bf5faccd772242dda749bd71e2d7f952.png

总的来说,通过小悠写的这个CPEFileVersionInfoHelper类,你可以很轻松的获取到exe、dll这些PE文件的 版权信息、作者信息、文件说明、商标信息等

下面附上小悠的这个CPEFileVersionInfoHelper类的VC6.0的示例工程下载地址:

解压密码yscode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值