EXE中资源的导入与导出

  1. // UpdateResource_Console.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. //including the file & Updating the resource data
  5. void ImportFile(void)
  6. {
  7.     HANDLE hFile;
  8.     DWORD dwFileSize,      
  9.           dwBytesRead;
  10.     LPBYTE lpBuffer;
  11.     
  12.     hFile = CreateFile("C://WINDOWS//system32//calc.exe", GENERIC_READ, 
  13.                        0,
  14.                        NULL,
  15.                        OPEN_EXISTING,
  16.                        FILE_ATTRIBUTE_NORMAL,
  17.                        NULL);
  18.     if (INVALID_HANDLE_VALUE != hFile)
  19.     {
  20.         dwFileSize = GetFileSize(hFile, NULL);
  21.         lpBuffer = new BYTE[dwFileSize];
  22.         if (ReadFile(hFile, lpBuffer, dwFileSize, &dwBytesRead, NULL) != FALSE)
  23.         {
  24.             // do something with lpBuffer here //Updating the resource data
  25.             HANDLE hResource;
  26.             hResource = BeginUpdateResource("C://Documents and Settings//mjs//"
  27.                 "桌面//资料//RightNowDoing//UpdateResource_MFC//"
  28.                 "Debug//UpdateResource_MFC.exe", FALSE);
  29.             if (NULL != hResource)
  30.             {
  31.                 char* p = MAKEINTRESOURCE(104);
  32.                 if (UpdateResource(hResource, 
  33.                     RT_RCDATA, 
  34.                     MAKEINTRESOURCE(104), 
  35.                     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),  //使用系统缺省语言
  36.                     (LPVOID) lpBuffer, 
  37.                     dwFileSize) != FALSE)
  38.                 {
  39.                     EndUpdateResource(hResource, FALSE);
  40.                 }
  41.             }
  42.         }
  43.         delete [] lpBuffer;          
  44.         CloseHandle(hFile);
  45.     }
  46. }
  47. //Extracting the data & Saving the data to a file
  48. void ExtractFile(void)
  49. {
  50.     HMODULE hLibrary;
  51.     HRSRC hResource;
  52.     HGLOBAL hResourceLoaded;
  53.     LPBYTE lpBuffer;
  54.     
  55.     hLibrary = LoadLibrary("C://Documents and Settings//mjs//"
  56.         "桌面//资料//RightNowDoing//UpdateResource_Console//"
  57.         "Debug//UpdateResource_Console.exe");
  58.     if (NULL != hLibrary)
  59.     {
  60.         char* p = MAKEINTRESOURCE(104);
  61.         hResource = FindResource(hLibrary, MAKEINTRESOURCE(104), RT_RCDATA);
  62.         LPVOID   lpMsgBuf;   
  63.         FormatMessage(     
  64.               FORMAT_MESSAGE_ALLOCATE_BUFFER   |     
  65.               FORMAT_MESSAGE_FROM_SYSTEM   |     
  66.               FORMAT_MESSAGE_IGNORE_INSERTS,   
  67.               NULL,   
  68.               GetLastError(),   //获得错误代码
  69.               MAKELANGID(LANG_NEUTRAL,   SUBLANG_DEFAULT),   //   Default   language   
  70.               (LPTSTR)   &lpMsgBuf,   //错误代码对应的文字描述
  71.               0,   
  72.               NULL     
  73.         );   
  74.         //   Process   any   inserts   in   lpMsgBuf.   
  75.         //   ...   
  76.         //   Display   the   string.   
  77.         MessageBox(   NULL,   (LPCTSTR)lpMsgBuf,   "Error",   MB_OK   |   MB_ICONINFORMATION   );   
  78.         //   Free   the   buffer.   
  79.         LocalFree(   lpMsgBuf   );  
  80.         if (NULL != hResource)
  81.         {
  82.             hResourceLoaded = LoadResource(hLibrary, hResource);
  83.             if (NULL != hResourceLoaded)        
  84.             {
  85.                 lpBuffer = (LPBYTE) LockResource(hResourceLoaded);            
  86.                 if (NULL != lpBuffer)            
  87.                 {                
  88.                     // do something with lpBuffer here
  89.                     DWORD dwFileSize,dwBytesWritten;
  90.                     HANDLE hFile;
  91.                     dwFileSize = SizeofResource(hLibrary, hResource);
  92.                     hFile = CreateFile("C://WINNT//TEMP//calc2.exe",
  93.                                GENERIC_WRITE,
  94.                                0,
  95.                                NULL,
  96.                                CREATE_ALWAYS,
  97.                                FILE_ATTRIBUTE_NORMAL,
  98.                                NULL);
  99.                     if (INVALID_HANDLE_VALUE != hFile)
  100.                     {
  101.                         WriteFile(hFile, lpBuffer, dwFileSize, &dwBytesWritten, NULL);
  102.                         CloseHandle(hFile);
  103.                     }
  104.                 }
  105.             }    
  106.         }
  107.         FreeLibrary(hLibrary);
  108.     }
  109. }
  110. int main(int argc, char* argv[])
  111. {
  112.     ImportFile();
  113.     ExtractFile();
  114.     return 0;
  115. }

        以上资料,均来自网上,记录下来,方便以后查看。把资源导入EXE,和从EXE导出文件时,有一点要留意,不能把一个资源导入到一个正在运行的程序,可以从一个正在运行的程序中导出资源。也就是要注意读写冲突。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值