通过 GetFileVersionInfo 获取EXE 或 DLL的各种资源

查找网上资源甚多,但无一个代码能用,甚憾。自已阅读MSDN资料,终于写得下面代码,经测试通过,若有问题请发邮件给我,谢谢!

struct LANGANDCODEPAGE
{
  WORD wLanguage;
  WORD wCodePage;
} *lpTranslate;

void GetInfoFromExeAndDll(PCTSTR pcszFileName)
{
 DWORD dwSize = 0;
 UINT uiSize = GetFileVersionInfoSize(pcszFileName,&dwSize);
 
 if (0 == uiSize)
 {
  //0 意味着GetFileVersionInfoSize 函数调用失败
  return;
 }

 PTSTR pBuffer = new TCHAR[uiSize];
 
 if (NULL == pBuffer)
 {
  //分配内存失败:)
  return ;
 }

 memset((void*)pBuffer,0,uiSize);

 //获取exe 或 DLL 的资源信息,存放在pBuffer内
 if(!GetFileVersionInfo(pcszFileName,0,uiSize,(PVOID)pBuffer))
 {
  //GetFileVersionInfo 调用失败.
  return ;
 }


 LANGANDCODEPAGE *pLanguage = NULL;  //这里这样设置没关系了。

 UINT  uiOtherSize = 0;
 //获取资源相关的 codepage 和language
 if (!VerQueryValue(pBuffer,_T("//VarFileInfo//Translation"),
    (PVOID*)&pLanguage,&uiOtherSize))
 {
  //出错
  return;
 }
 
 //
 //
 //超级重点

 PVOID pTmp = NULL;   //一定要把pTmp这个变量设置成PVOID或LPVOID型的
        //否则无法获取信息。你不信可以试。
 //TCHAR *pTmp = NULL;
 //或下面这样的设置
 //TCHAR pTmp[MAX_PATH];
 //memset((void*)pTmp,0,sizeof(pTmp));


 //
 //

 TCHAR SubBlock[MAX_PATH];
 memset((void*)SubBlock,0,sizeof(SubBlock));

 for(UINT i=0; i < (uiOtherSize / sizeof(LANGANDCODEPAGE)); i++ )
 {
  //获取每种 CodePage 和 Language 资源的相关信息
  wsprintf(SubBlock,
            TEXT("//StringFileInfo//%04x%04x//OriginalFilename"),
            pLanguage[i].wLanguage,
            pLanguage[i].wCodePage);

//   Comments InternalName ProductName
//   CompanyName LegalCopyright ProductVersion
//   FileDescription LegalTrademarks PrivateBuild
//   FileVersion OriginalFilename SpecialBuild  

  // OriginalFilename 可由上面的各种代替。


  // Retrieve file description for language and code page "i".
  VerQueryValue(pBuffer,
   SubBlock,
   (PVOID*)&pTmp,
   &uiOtherSize);
  TCHAR chOriginalFileName[MAX_PATH];
  memset((void*)chOriginalFileName,0,sizeof(chOriginalFileName));
  _tcscpy(chOriginalFileName,(TCHAR*)pTmp);
  MessageBox(NULL,chOriginalFileName,_T("Succeed!"),MB_OK);
 }
 delete []pBuffer;
 pBuffer = NULL;
}

记得在Project->Settings->Linking 的Object/library modules 内输入 version.lib这个库。

当然头文件需加上#include <tchar.h>

和 #include <windows.h>

其余的就没什么了。希望能对你有帮助。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
加密软件漏洞评测系统是一个非常专业的文档透明加密系统测试软件。这款文档透明加密系统功能强大,除了漏洞评测之外, 还可以进行剪切板控制、虚拟打印机、截屏等实用功能,让你评测更加标准!   加密软件漏洞评测系统使用说明:   在安装了文档透明加密软件的电脑上,用该工具对需要解密测试的文件进行打包( 打包后的文件   名默认为Crack.crk)。将打包后的文件复制到未安装加密软件的电脑上,用文件提取程序(GetFile.exe)   来提取文件,则提取出来的文件为明文文件(目前对市场上的所有文档透明加密系统均有效)。   加密软件漏洞评测系统使用方法如下:   1、打开FileDecrypt.exe;   2、切换到【伪造程序】页,如果你要解密Word文件,在程序伪造成中选择microsoft Word,如果你要解密Excel,则程序伪造成选择Microsoft Excel.以此类推。   3、返回【解密】页,打包模式选择Mode2、Mode3、Mode4、Mode5或Mode7。   4、添加要解密的文件,并点击打包。   5、将打包后的文件(Crack.crk)copy到未安装加密软件的电脑上   6、用GetFile.exe程序打开打包文件(Crack.crk)   7、提取文件(需要注册后才能提取,如果你还未注册,需要测试是否能正常提取,则可将crack.crk文件发给我,我提取后再发给你) 如果你在加密系统环境下,发现无法启动FileDecrypt.exe,你有以下三个解决途径: 1、在FileDecrypt.exe目录下,建立一个FileDecrypt.ini文件,双击FileDecrypt.exe通常都可正常启动。 2、使用DOS使用命令来启动程序,命令格式如下: D:\FileDecrypt.exe -R 2 3、联系我来解决。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值