设为首页 加入收藏

TOP

VC程序如何释放文件
2013-04-10 11:38:11 来源: 作者: 【 】 浏览:187
Tags:程序 如何 释放 文件

  很久以前写过一个在EXE的资源中释放出一个文件,然后加载运行做些事情的小程序,时间久了,忽然又有这个需求的时候,居然忘记是如何做的了,原来的程序代码早被删了,自己胡乱试验几次,结果弄出N个蓝屏出来,只好上网查了一下,但没有发现很理想的资料。只好吭哧吭哧费了九牛二虎才搞定,所以在此记录一下,以免以后忘记了。

  声明:本文只用作技术研究,思想不良人士请勿参照此方法释放驱动,可执行程序等做坏事,否则后果自负。

  废话少说,转入正题。

  需要:释放一个名为001.jpg文件到C盘根目录,并修改成名字002.jpg

  随便建个VC的工程,在VC工程的的"Resource View"画面中,鼠标右键-〉add->add resource,出现添加资源画面,然后选"Import...",找到001.jpg,然后确定,显示资源类型定义对话框,在资源类型定义中,自己定义一个不存在的类型名,这里叫TROJANHORSE,然后就把001.jpg添加进来了。这个时候,"Resource View"画面中会多出一个"TROJANHORSE"类型,下面资源名为:IDR_TROJANHORSE1,这个名字可以自由修改。

  在代码中,写一个函数,(函数懒得自己写,借助了网上资料,出处忘记了)为

  BOOL ReleaseMyFile(LPCTSTR lpszDestFilePath, LPCTSTR lpName, LPCTSTR lpType)

  {

  HRSRC hRsrc = ::FindResource(NULL, lpName, lpType);

  if (NULL == hRsrc)

  return FALSE;

  HGLOBAL hGlobal = ::LoadResource(NULL, hRsrc);

  if (NULL == hGlobal)

  return FALSE;

  DWORD dwSize = ::SizeofResource(NULL, hRsrc);

  LPVOID pBuffer = ::LockResource(hGlobal);

  BOOL bRt = FALSE;

  FILE* fp = _tfopen(lpszDestFilePath, _T("wb"));

  if (fp != NULL)

  {

  if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))

  bRt = TRUE;

  fclose(fp);

  }

  return bRt;

  }

  然后就可以在main中调这个函数释放资源文件了,具体代码如下:

  BOOL bRt = ReleaseMyFile(TEXT("c:\\002.jpg"), MAKEINTRESOURCE(IDR_TROJANHORSE1), TEXT("TROJANHORSE"));

  当然,可以把001.jpg换成exe或者sys文件,做该做的事情。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇vc所支持的文件类型 下一篇VC调用外部程序接口

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: