首页 > Windows SDK > MFC/Win32 SDK从资源释放文件代码

MFC/Win32 SDK从资源释放文件代码

准备把一些比较常用的代码放到博客上做一个备份,方便自己日后快速查找。我给这些文章都加一个标签——“代码仓库”。今天贴上来的代码是从资源释放文件的函数,也就是先把一些文件(格式不限)以资源的方式加入到Win32/MFC的工程里面,然后通过代码动态释放,这种做法的好处是可以把很多文件集中在一起,方便用户使用;当然,病毒也经常使用这种技术,施放DLL、SYS之类的。

如果要防止安全软件误报,最好还是先做一个简单的加密,比如异或一个BYTE、增加或减少一个常数之类的,这个还是不加了,要不就显得臃肿了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// 功能描述:释放指定资源到文件
// 作者:代码疯子(http://www.programlife.net/)
// 申明:使用本代码所造成的任务后果均由使用者承担
 
// 宏定义
#define CHECK_NULL_RET(lp) if (!(lp)) {goto Exit0;}
 
// 函数代码
BOOL ReleaseFileFromRes(TCHAR szResType[], UINT uResId, TCHAR szFilePath[])
{
	BOOL bRet = FALSE;
	LPTSTR lpResName = NULL;
	HRSRC hRes = NULL;
	HGLOBAL hResData = NULL;
	DWORD dwSize = 0, dwWrite = 0;;
	LPBYTE lpBytes = NULL;
	HANDLE hFile = INVALID_HANDLE_VALUE;
 
	lpResName = MAKEINTRESOURCE(uResId);
	hRes = FindResource(NULL, lpResName, szResType);
	CHECK_NULL_RET(hRes);
 
	hResData = LoadResource(NULL, hRes);
	CHECK_NULL_RET(hResData);
	dwSize = SizeofResource(NULL, hRes);
	lpBytes = (LPBYTE)GlobalAlloc(GPTR, dwSize);
	CHECK_NULL_RET(lpBytes);
 
	CopyMemory((LPVOID)lpBytes, (LPCVOID)LockResource(hResData), dwSize);
 
	bRet = DeleteFile(szFilePath);
	// CHECK_NULL_RET(bRet);
	bRet = FALSE;
 
	hFile = CreateFile(szFilePath,
		GENERIC_READ | GENERIC_WRITE, 
		FILE_SHARE_WRITE,
		NULL,
		CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	if (hFile != INVALID_HANDLE_VALUE)
	{
		bRet = WriteFile(hFile, lpBytes, dwSize, &dwWrite, NULL);
	}
 
Exit0:
	CloseHandle(hFile);
	FreeResource(hResData);
	GlobalFree(lpBytes);
 
	return bRet;
}

觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> MFC/Win32 SDK从资源释放文件代码
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 本文目前尚无任何评论.