BeginUpdateResource(……)
UpdateResource(……)
EndUpdateResource(……)
只是把一些数据打到一个pe文件的里面作为资源而已的,打进去的数据不会被运行的(对程序来说,打进去的只是一个2进制数据)。如果要这些数据被运行,还是要把这些资源释放出来还原成pe文件才可以运行的。
如果要把它释放,应该
FindResource()找到资源 ::SizeofResource()获取资源的大小,-》::LoadResourc()-》LPVOID lpResData = ::LockResource(hResData);
-》把lpResData 的数据写到一个文件里面去就行了。写入的大小为前面的SizeofResource 。
下面是我写过的一个程序 动作就是释放资源包
,看看对你是否有价值
BOOL GetBindResInfo(LPBYTE *lpResInfo, LPDWORD lpdwResSize)
{
if (lpResInfo == NULL || lpdwResSize == 0) {
return FALSE;
}
HRSRC hResInfo = ::FindResource(NULL, RES_NAME_BIND_INFO, RT_RCDATA);
DWORD dwResSize = ::SizeofResource(NULL, hResInfo);
if (dwResSize == 0) {
return FALSE;
}
HGLOBAL hResData = ::LoadResource(NULL, hResInfo);
LPVOID lpResData = ::LockResource(hResData);
LPBYTE lpResBuffer = new BYTE[dwResSize];
::memcpy(lpResBuffer, lpResData, dwResSize);
(*lpResInfo) = lpResBuffer;
(*lpdwResSize) = dwResSize;
::FreeResource(hResData);
return TRUE;
}